{
  "issues": [
    {
      "url": "https://api.github.com/repos/google/tunix/issues/1063",
      "id": 3910127300,
      "node_id": "I_kwDOOTDVN87pD87E",
      "number": 1063,
      "title": "Qwen3-VL",
      "user": {
        "login": "ridcl",
        "id": 214909705,
        "node_id": "U_kgDODM9DCQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/214909705?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/ridcl",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2026-02-07T12:07:52Z",
      "updated_at": "2026-02-09T12:26:46Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Is your feature request related to a problem? Please describe.**\n\nCurrently, Tunix supports text-only Qwen3, but not multimodal Qwen3-VL. This makes it harder to compare performance of different VLMs on vision-language tasks.\n\n**Describe the solution you'd like**\n\nAccording to the [technical report](https://arxiv.org/pdf/2511.21631), Qwen3-VL adopts a three-module architecture comprising a vision encoder, an MLP-based vision–language merger, and a large language model (LLM). The vision encoder is SigLIP2, which we already have as WIP in #511. \n\nIt's also worth to mention:\n\n* Interleaved MRoPE, which we don't seem to support yet\n* DeepStack for the vision-language merger, which is a bit more complicated than what we gave for Gemma 3\n* Video timestamp\n\n**Additional context**\n\nA couple of design questions: \n\n1. Should we wait for #511 to be merged or start the work on Qwen3-VL in parallel? Calling @abheesht17 for an opinion. \n2. Should we extend (text-only) Qwen3 or create a totally new model? I'm not sure it will be easy to integrate DeepStack without changing the way of the text-only version. \n\n**Checklist**\n\n- [x] I have searched the existing issues for similar feature requests.\n- [x] This is not a support question (please use the \"bug template\" for that).\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/1063/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/1049",
      "id": 3900632286,
      "node_id": "I_kwDOOTDVN87ofuze",
      "number": 1049,
      "title": "`.sow()` intermediate values don't enable Dead Code Elimination of unused outputs",
      "user": {
        "login": "mdda",
        "id": 362532,
        "node_id": "MDQ6VXNlcjM2MjUzMg==",
        "avatar_url": "https://avatars.githubusercontent.com/u/362532?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/mdda",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 9550630502,
          "node_id": "LA_kwDOOTDVN88AAAACOUMOZg",
          "url": "https://api.github.com/repos/google/tunix/labels/type:performance",
          "name": "type:performance",
          "color": "e7b5e4",
          "default": false,
          "description": "Make things lean and fast"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2026-02-05T09:42:38Z",
      "updated_at": "2026-02-09T12:26:26Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "## Summary\n\nWhen using `output_hidden_states=True` with the Gemma3 model to access intermediate hidden states via `.sow()`, the final logits computation is still materialized even when the logits return value is ignored. This prevents efficient \"headless\" inference where only embeddings are needed (or, for my case, top-k logit extraction without full logit computation).\n\n## Context\n\nThe Gemma3 `Transformer.__call__` method supports outputting hidden states via `.sow()`:\n\n(https://github.com/google/tunix/blob/main/tunix/models/gemma3/model.py#L966)\n\n```python\nif output_hidden_states:\n    self.sow(nnx.Intermediate, 'all_hidden_states', x)\nlogits = self.embedder.decode(x)\nreturn logits, new_cache\n```\n\n**Expected Behavior**\n\nWhen wrapping the model to only extract the sowed `all_hidden_states` and ignoring the returned logits, JAX's Dead Code Elimination (DCE) should recognize that:\n1. The logits are never used\n2. The `embedder.decode(x)` matmul can be eliminated\n3. Only the hidden states need to be computed\n\nThis would save significant memory and compute, since the embedding→vocab matmul (e.g., `[B, L, hidden] @ [hidden, 262144]`) is one of the largest operations.\n\n**Actual Behavior**\n\nThe logits matmul is still present in the compiled jaxpr, even when the logits are completely ignored. DCE does not eliminate the unused computation.\n\n**Steps to Reproduce the Problem**\n\nI created a simplified 2-layer NNX model to isolate the issue:\n\n```python\nimport jax\nimport jax.numpy as jnp\nfrom flax import nnx\n\nDIM_INPUT = 10\nDIM_HIDDEN = 20\nDIM_OUTPUT = 1000  # Large - should be DCE'd if unused\n\nclass SimpleTwoLayerModel(nnx.Module):\n    def __init__(self, rngs: nnx.Rngs):\n        self.layer1 = nnx.Linear(DIM_INPUT, DIM_HIDDEN, rngs=rngs)\n        self.layer2 = nnx.Linear(DIM_HIDDEN, DIM_OUTPUT, rngs=rngs)\n\n    def __call__(self, x, output_hidden=False):\n        hidden = nnx.relu(self.layer1(x))\n        if output_hidden:\n            self.sow(nnx.Intermediate, 'hidden_state', hidden)\n        output = self.layer2(hidden)\n        return output\n\nclass HeadlessWrapper(nnx.Module):\n    def __init__(self, model):\n        self.model = model\n\n    def __call__(self, x):\n        _ = self.model(x, output_hidden=True)  # Ignore output!\n        sow_state = nnx.pop(self.model, nnx.Intermediate)\n        return sow_state['hidden_state'].value[0]\n\n# Test\nrngs = nnx.Rngs(0)\nbase_model = SimpleTwoLayerModel(rngs)\nheadless = HeadlessWrapper(base_model)\n\n@nnx.jit\ndef run_headless(model, x):\n    return model(x)\n\nx = jnp.ones((1, DIM_INPUT))\njaxpr = jax.make_jaxpr(run_headless)(headless, x)\nprint(jaxpr)  # Shows matmul with DIM_OUTPUT still present\n```\n\n**Colab notebook with full test:** \n\nhttps://colab.research.google.com/drive/1-gAlL5fHwZvaEVskHtiCfAz0xsLiElKu?usp=sharing \n\n\n**Environment**\n\nper provided Colab:\n\n```txt\nPython 3.12.12\nflax==0.12.3\njax==0.9.0\n```\n\n**Checklist**\n\n- [Y] I have searched the existing issues for a similar bug report.\n- [Y] I have provided all the required information in the \"Environment\" section.\n- [Y] I have provided a minimal, reproducible example.\n\n**Would you like to help us fix it?**\n\nIt seems that (unless there is something obvious that I'm missing) this could be an upstream nnx (or jax) issue, with the resolution largely in Google's hands - but any feedback here would be welcome.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/1049/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/1040",
      "id": 3889893835,
      "node_id": "I_kwDOOTDVN87n2xHL",
      "number": 1040,
      "title": "[Tiny Feat] make log_level be configurable",
      "user": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "aolemila",
          "id": 214426322,
          "node_id": "U_kgDODMfi0g",
          "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/aolemila",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 0,
      "created_at": "2026-02-03T08:22:57Z",
      "updated_at": "2026-02-03T16:31:21Z",
      "closed_at": null,
      "author_association": "COLLABORATOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Is your feature request related to a problem? Please describe.**\n<!---\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n-->\nLack of debug logs.\n\n**Describe the solution you'd like**\n<!---\nA clear and concise description of what you want to happen.\n-->\nMake log_level be configurable rather than fixed value which is info.\n\n**Additional context**\n<!---\nAdd any other context or screenshots about the feature request here.\n-->\n\n**Checklist**\n\n- [ ] I have searched the existing issues for similar feature requests.\n- [ ] This is not a support question (please use the \"bug template\" for that).\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/1040/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        1041
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/995",
      "id": 3841212230,
      "node_id": "I_kwDOOTDVN87k9D9G",
      "number": 995,
      "title": "[Bug] Fix run_prod for scripts/grpo_demo_llama3_qwen2.py with sglang_jax with LoRA",
      "user": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "aolemila",
          "id": 214426322,
          "node_id": "U_kgDODMfi0g",
          "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/aolemila",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2026-01-22T04:42:47Z",
      "updated_at": "2026-01-22T16:59:06Z",
      "closed_at": null,
      "author_association": "COLLABORATOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Expected Behavior**\n\nPass.\n\n**Actual Behavior**\n\nFailed with the following error:\n\n```bash\n  File \"/usr/local/lib/python3.12/site-packages/jax/_src/tree_util.py\", line 361, in tree_map\n    return treedef.unflatten(f(*xs) for xs in zip(*all_leaves))\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.12/site-packages/jax/_src/tree_util.py\", line 361, in <genexpr>\n    return treedef.unflatten(f(*xs) for xs in zip(*all_leaves))\n                             ^^^^^^\n  File \"/usr/local/lib/python3.12/site-packages/qwix/_src/flax_util.py\", line 293, in fn\n    return unbox(x.get_raw_value())\n                 ^^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.12/site-packages/flax/nnx/variablelib.py\", line 299, in __getattr__\n    return getattr(self.raw_value, name)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAttributeError: 'jaxlib._jax.ArrayImpl' object has no attribute 'get_raw_value'\nOne or more scripts failed!\n```\nSee more [here](https://github.com/google/tunix/actions/runs/21205448021/job/61000751630#step:7:11846).\n\n**Steps to Reproduce the Problem**\n\n```bash\n        unset JAX_PLATFORMS\n        pip list | egrep 'jax|flax|libtpu'\n        cd ..\n        git clone https://github.com/sgl-project/sglang-jax.git && cd sglang-jax/python && pip install -e . && cd ../..\n        pip install jax==0.8.1 flax==0.12.0 libtpu==0.0.24\n        pip list | egrep 'jax|flax|libtpu'\n        cd tunix\n```\n\nRun `python scripts/grpo_demo_llama3_qwen2.py --root-dir=/tmp/grpo_test --num-batches=20 --rollout-engine sglang_jax --enable-lora --lora-target-modules all`.\n\n<!---\nIf possible, provide a link to a [Colab Notebook](https://research.google.com/colaboratory/),\nwhich reproduces the bug.\n-->\n\n**Environment**\n\n- **OS:** [e.g., Ubuntu, etc.]\n- **Project Version:** [e.g., 0.0.1]\n\n**Checklist**\n\n- [ ] I have searched the existing issues for a similar bug report.\n- [ ] I have provided all the required information in the \"Environment\" section.\n- [ ] I have provided a minimal, reproducible example.\n\n**Would you like to help us fix it?**\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/995/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        996
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/979",
      "id": 3818556598,
      "node_id": "I_kwDOOTDVN87jmoy2",
      "number": 979,
      "title": "Natural Language to SQL GRPO Example",
      "user": {
        "login": "NP2241",
        "id": 65132325,
        "node_id": "MDQ6VXNlcjY1MTMyMzI1",
        "avatar_url": "https://avatars.githubusercontent.com/u/65132325?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/NP2241",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2026-01-15T17:55:29Z",
      "updated_at": "2026-02-07T07:36:37Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Is your feature request related to a problem? Please describe.**\n<!---\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n-->\nTunix currently lacks an example showing how to use GRPO with an external execution environment (e.g., a SQL database), making it unclear how to define structured rewards beyond text only tasks.\n\n**Describe the solution you'd like**\n<!---\nA clear and concise description of what you want to happen.\n-->\nI propose adding a small natural language to SQL GRPO example where the model generates SQL, the SQL is executed against a small SQLite database, and the reward reflects execution success and result correctness. If maintainers are open to this addition, I can implement a full example.\n\n**Additional context**\n<!---\nAdd any other context or screenshots about the feature request here.\n-->\nThis would give users a clear reference for integrating Tunix with external tools and for building verifiable RL tasks beyond GSM8K.\n\n**Checklist**\n\n- [x] I have searched the existing issues for similar feature requests.\n- [x] This is not a support question (please use the \"bug template\" for that).\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/979/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        997
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/977",
      "id": 3818446423,
      "node_id": "I_kwDOOTDVN87jmN5X",
      "number": 977,
      "title": "Add GDPO Support",
      "user": {
        "login": "kmsgnnew",
        "id": 16554470,
        "node_id": "MDQ6VXNlcjE2NTU0NDcw",
        "avatar_url": "https://avatars.githubusercontent.com/u/16554470?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kmsgnnew",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2026-01-15T17:22:35Z",
      "updated_at": "2026-01-15T18:27:40Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Is your feature request related to a problem? Please describe.**\n\n GRPO inherently compresses the reward signal, causing loss of information in the advantage estimates. Group-wise decoupled normalization of each reward separately better preserves cross-reward distinctions and enables more accurate multi-reward optimization.\n\n**Describe the solution you'd like**\nhttps://arxiv.org/abs/2601.05242\n\n**Additional context**\nAuthors have reported huge improvement in results\n\nHow i came to this  --? \nAs part of Google Tunix hackathon i have observed the problem of GRPO with a multi reward optimization. I found this latest paper directly questions the issues of loss of information in advantage estimates in GRPO hence i would love to add this to Tunix!\n\n**Checklist**\n\n- [x] I have searched the existing issues for similar feature requests.\n- [x] This is not a support question (please use the \"bug template\" for that).\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/977/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        978
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/953",
      "id": 3790628178,
      "node_id": "I_kwDOOTDVN87h8GVS",
      "number": 953,
      "title": "Feature Request: RLOO (REINFORCE Leave-One-Out) Advantage Estimator",
      "user": {
        "login": "42euge",
        "id": 169945246,
        "node_id": "U_kgDOCiEong",
        "avatar_url": "https://avatars.githubusercontent.com/u/169945246?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/42euge",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2026-01-07T22:55:43Z",
      "updated_at": "2026-01-08T05:45:44Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "## Is your feature request related to a problem? Please describe.\n\nI'm working on the Tunix hackathon and running into stability issues training on rubric-based rewards (for the \"show your work\" objective). The current GRPO works well when you have binary correct/wrong signals from a verifier, but my setup uses continuous scores from a reward model evaluating reasoning quality.\n\nThe problem is GRPO's std normalization amplifies noise when rewards are subjective. I'm also seeing reward hacking since there's no KL mechanism to keep the policy from drifting too far to exploit the reward model.\n\n## Describe the solution you'd like\n\nAdd RLOO (REINFORCE Leave-One-Out) as an alternative advantage estimator. The main difference from GRPO:\n\n```python\n# GRPO (current)\nA_i = (R_i - mean(R)) / std(R)\n\n# DrGRPO (removes std, already exists)\nA_i = R_i - mean(R)\n\n# RLOO (leave-one-out baseline + KL in reward)\nA_i = R_i - mean(R_j where j != i) - β * KL_i\n```\n\nRLOO uses a leave-one-out baseline instead of batch mean, which is more numerically stable. Critically, it folds KL directly into the reward `R'_i = R_i - β * KL_i` before advantage computation, rather than adding it to the loss function afterward.\n\n[Ahmadian et al. 2024](https://arxiv.org/abs/2402.14740) showed RLOO is more robust to noisy rewards than PPO/GRPO and outperforms DPO on preference tasks. It's also what [PRIME](https://arxiv.org/abs/2502.01456) uses under the hood.\n\n## Implementation approach\n\nVerified that Tunix already has the infrastructure for this (function_registry.py):\n\n1. Add `advantage_estimator='rloo'` option in `GRPOConfig`\n2. Add `kl_in_reward: bool = False` parameter to control where KL is applied\n3. Register new advantage estimator function with `@function_registry.register_advantage_estimator(\"rloo\")` (following drgrpo_learner.py pattern)\n4. Modify reward computation in `_generate_and_compute_advantage()` to optionally fold KL into rewards when `kl_in_reward=True`\n\nThis follows the existing pluggable advantage estimator pattern and doesn't require a separate learner class.\n\n## Additional context\n\nThis would help hackathon participants working on non-verifiable tasks. Right now GRPO is tuned for math/code with binary rewards - RLOO would extend Tunix to creative/subjective domains.\n\nReference implementations:\n- [verl RLOO](https://github.com/volcengine/verl)\n- [swift RLOO docs](https://swift.readthedocs.io/en/latest/Instruction/GRPO/AdvancedResearch/RLOO.html)\n\n## Checklist\n\n- [x] I have searched the existing issues for similar feature requests.\n- [x] I have verified the codebase already supports pluggable advantage estimators via function_registry.\n- [x] This is not a support question (please use the \"bug template\" for that).\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/953/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        1000
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/944",
      "id": 3778540052,
      "node_id": "I_kwDOOTDVN87hN_IU",
      "number": 944,
      "title": "Wrong Python version causing Attribute Error is_integer() in utils.py",
      "user": {
        "login": "taesuhpark",
        "id": 84999437,
        "node_id": "MDQ6VXNlcjg0OTk5NDM3",
        "avatar_url": "https://avatars.githubusercontent.com/u/84999437?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/taesuhpark",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 2,
      "created_at": "2026-01-03T22:10:15Z",
      "updated_at": "2026-01-06T01:23:12Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "https://github.com/google/tunix/blob/3b558520bb65e4cd649f8199362f9dc144e541da/pyproject.toml#L8\n\nThis version should be set to '>=3.12' (or higher) at least, because tunix/tunix/rl/utils.py calls value.is_integer() which is safely supported for the base `int` type since Python v3.12.  For example, see below:\nhttps://github.com/google/tunix/blob/3b558520bb65e4cd649f8199362f9dc144e541da/tunix/rl/utils.py#L37\n\nI tested it with v3.11 and confirmed it causes Attribute Error. You should upgrade the default Python version to 3.12 (or higher) in pyproject.toml or substitute all value.is_integer() with the more primitive and safe isinstance().",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/944/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/943",
      "id": 3777548271,
      "node_id": "I_kwDOOTDVN87hKM_v",
      "number": 943,
      "title": "Qwen2.5-7B gets ~50% on GSM8K eval while Qwen2.5-3B gets ~80% using scripts/grpo_demo_llama3_qwen2.py",
      "user": {
        "login": "zyh1999",
        "id": 25893843,
        "node_id": "MDQ6VXNlcjI1ODkzODQz",
        "avatar_url": "https://avatars.githubusercontent.com/u/25893843?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/zyh1999",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 9550630502,
          "node_id": "LA_kwDOOTDVN88AAAACOUMOZg",
          "url": "https://api.github.com/repos/google/tunix/labels/type:performance",
          "name": "type:performance",
          "color": "e7b5e4",
          "default": false,
          "description": "Make things lean and fast"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2026-01-03T01:34:08Z",
      "updated_at": "2026-01-05T04:41:15Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "\n### Description\n\nHi — I’m evaluating GSM8K using:\n\n`scripts/grpo_demo_llama3_qwen2.py`\n\nThis is **eval-only (no training), pass@1**, using the **vanilla inference engine**.\n\nResults:\n\n| Model | Accuracy | Note |\n|------|----------|------|\n| **Qwen2.5-3B-Instruct** | ~80% | consistent with Qwen’s official report |\n| **Qwen2.5-7B-Instruct** | ~50% | much lower than expected |\n\nTo enable the 3B model I only added a few lines of configuration (no training logic changed).  \nThe small patch is here for reference:\n\n👉 **Link:** <[PASTE YOUR PR / GIST HERE](https://github.com/zyh1999/tunix/tree/only-test?tab=readme-ov-file)>\n\n\n### Reproduction\n\npython3 scripts/grpo_demo_llama3_qwen2.py   --model-version=Qwen/Qwen2.5-7B-Instruct   --rollout-engine=vanilla   --global-batch-size=16   --num-test-batches=83  --max-tpu-to-use=4 --eval-only=True\n\npython3 scripts/grpo_demo_llama3_qwen2.py   --model-version=Qwen/Qwen2.5-3B-Instruct   --rollout-engine=van\nilla   --global-batch-size=16   --num-test-batches=83  --max-tpu-to-use=2 --eval-only=True\n\n\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/943/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/939",
      "id": 3762143205,
      "node_id": "I_kwDOOTDVN87gPb_l",
      "number": 939,
      "title": "Clarify differences between examples/rl/grpo GSM8K recipes and scripts/grpo_demo_llama3_qwen2.py",
      "user": {
        "login": "zyh1999",
        "id": 25893843,
        "node_id": "MDQ6VXNlcjI1ODkzODQz",
        "avatar_url": "https://avatars.githubusercontent.com/u/25893843?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/zyh1999",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274168,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1eA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:support",
          "name": "type:support",
          "color": "d876e3",
          "default": false,
          "description": "Further information is requested"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 2,
      "created_at": "2025-12-25T15:45:14Z",
      "updated_at": "2025-12-31T04:01:45Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Hi, thanks for open-sourcing Tunix!\n\nI’m a bit confused about the two GRPO entry points that seem to cover similar use cases:\n\nShell scripts under examples/rl/grpo/gsm8k (e.g. run_llama3.2_1b.sh, run_gemma3_1b.sh), which call python -m tunix.cli.grpo_main ... with a base_config.yaml, dataset_name=\"gsm8k\", reward_functions=\"['tunix/cli/reward_fn/gsm8k.py']\", and various overrides for steps, LR, checkpointing, etc.\n\nThe Python demo scripts/grpo_demo_llama3_qwen2.py, which sets up GRPO for Llama 3 / Qwen 2 with its own argument parser (e.g. --model-version) .\n\nSo what is the main difference? When should I choose this one instead of the other?",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/939/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/902",
      "id": 3736740260,
      "node_id": "I_kwDOOTDVN87euiGk",
      "number": 902,
      "title": "RL utils.py has an incorrect check for is_positive_integer",
      "user": {
        "login": "Ajay-26",
        "id": 64776385,
        "node_id": "MDQ6VXNlcjY0Nzc2Mzg1",
        "avatar_url": "https://avatars.githubusercontent.com/u/64776385?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Ajay-26",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-12-16T23:45:28Z",
      "updated_at": "2025-12-17T22:59:07Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Hi! Raising this issue to note that there might be a bug in initializing cluster config for RL. \n\nThe following snippet crashes when I run it:\n\n```\n# Training config\ncluster_config = rl_cluster_lib.ClusterConfig(\n    role_to_mesh={\n        rl_cluster_lib.Role.ACTOR: mesh,\n        rl_cluster_lib.Role.REFERENCE: mesh,\n        rl_cluster_lib.Role.ROLLOUT: mesh,\n    },\n    rollout_engine='vanilla',\n    offload_to_cpu=False,\n    training_config=rl_cluster_lib.RLTrainingConfig(\n        actor_optimizer=optimizer,\n        eval_every_n_steps=EVAL_EVERY_N_STEPS,\n        max_steps=MAX_STEPS,\n        mini_batch_size=TRAIN_MICRO_BATCH_SIZE,\n        train_micro_batch_size=TRAIN_MICRO_BATCH_SIZE,\n        # metrics logging\n        metrics_logging_options=metrics_logging_options,\n        # checkpoint saving\n        checkpoint_root_directory=CKPT_DIR,\n        checkpointing_options=checkpointing_options,\n    ),\n    rollout_config=base_rollout.RolloutConfig(\n        max_tokens_to_generate=TOTAL_GENERATION_STEPS,\n        max_prompt_length=MAX_PROMPT_LENGTH,\n        kv_cache_size=MAX_PROMPT_LENGTH + TOTAL_GENERATION_STEPS + 256,\n        temperature=TEMPERATURE,\n        top_p=TOP_P,\n        top_k=TOP_K,\n        eos_tokens=EOS_TOKENS,\n    ),\n)\n\ngrpo_config = GRPOConfig(\n    num_generations=NUM_GENERATIONS,\n    num_iterations=NUM_ITERATIONS,\n    beta=BETA,\n    epsilon=EPSILON,\n)\n```\n\n**Expected Behavior**\nThe given snippet should simply work. \n\n**Actual Behavior**\nThe snippet raises the following error:\n```\n---------------------------------------------------------------------------\nAttributeError                            Traceback (most recent call last)\n/tmp/ipykernel_181/593643255.py in <cell line: 0>()\n      8     rollout_engine='vanilla',\n      9     offload_to_cpu=False,\n---> 10     training_config=rl_cluster_lib.RLTrainingConfig(\n     11         actor_optimizer=optimizer,\n     12         eval_every_n_steps=EVAL_EVERY_N_STEPS,\n\n/usr/local/lib/python3.11/dist-packages/tunix/rl/rl_cluster.py in __init__(self, eval_every_n_steps, max_steps, gradient_accumulation_steps, checkpoint_root_directory, checkpointing_options, metrics_logging_options, profiler_options, data_sharding_axis, max_inflight_computations, metrics_prefix, pbar_description, actor_optimizer, critic_optimizer, mini_batch_size, train_micro_batch_size, rollout_micro_batch_size, compute_logps_micro_batch_size)\n\n/usr/local/lib/python3.11/dist-packages/tunix/rl/rl_cluster.py in __post_init__(self)\n    112         \"compute_logps_micro_batch_size\",\n    113     ]:\n--> 114       rl_utils.is_positive_integer(getattr(self, name), name)\n    115 \n    116     if self.gradient_accumulation_steps is not None:\n\n/usr/local/lib/python3.11/dist-packages/tunix/rl/utils.py in is_positive_integer(value, name)\n     35 def is_positive_integer(value: int | None, name: str):\n     36   \"\"\"Checks if the value is positive.\"\"\"\n---> 37   if value is not None and (not value.is_integer() or value <= 0):\n     38     raise ValueError(f\"{name} must be a positive integer. Got: {value}\")\n     39 \n\nAttributeError: 'int' object has no attribute 'is_integer'\n```\n\n**Steps to Reproduce the Problem**\n\n1.Run the above provided snippet. It can be found in the link given below\n\n<!---\nIf possible, provide a link to a [Colab Notebook](https://research.google.com/colaboratory/),\nwhich reproduces the bug.\n-->\nI am trying to run the provided example on GRPO that is given [here](https://github.com/google/tunix/blob/main/examples/grpo_gemma.ipynb) on a Kaggle notebook. \n\nI have been able to locate that the issue is in [the is_positive_integer() function here](https://github.com/google/tunix/blob/main/tunix/rl/utils.py) on line 35\n\nHappy to make a PR with the fix. ",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/902/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        1000,
        930
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/887",
      "id": 3730152964,
      "node_id": "I_kwDOOTDVN87eVZ4E",
      "number": 887,
      "title": "Feature request: Add Contrastive Representation Distillation (CRD)",
      "user": {
        "login": "surajyadav-research",
        "id": 223458481,
        "node_id": "U_kgDODVG0sQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/223458481?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/surajyadav-research",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-12-15T12:14:20Z",
      "updated_at": "2025-12-15T16:22:16Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "\nRequesting a built-in **Contrastive Representation Distillation (CRD)** strategy (Tian et al., 2019) for `tunix.distillation.DistillationTrainer`.\n\n## What CRD does\nDistills at the **representation level** using an InfoNCE/contrastive loss:\n- positive pair: (student rep, teacher rep) from the **same sample**\n- negatives: mismatched pairs (e.g., in-batch negatives)\n\nMinimal form:\n- `logits = (z_s @ z_t.T) / tau`\n- `labels = arange(B)`\n- `loss = CE(logits, labels)` (optional symmetric term on `logits.T`)\n\n## Why this helps\n- Complements / improves over logit-KD in many setups\n\n\n## Reference\nTian et al., *Contrastive Representation Distillation*, arXiv:1910.10699 (2019): https://arxiv.org/pdf/1910.10699\n\n\nI can contribute a PR + tests if you’re open to it.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/887/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/884",
      "id": 3727014423,
      "node_id": "I_kwDOOTDVN87eJboX",
      "number": 884,
      "title": "Gemma 3 1b model loading asyncio error on kaggle notebook",
      "user": {
        "login": "kamalkraj",
        "id": 17096858,
        "node_id": "MDQ6VXNlcjE3MDk2ODU4",
        "avatar_url": "https://avatars.githubusercontent.com/u/17096858?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kamalkraj",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 3,
      "created_at": "2025-12-14T09:06:42Z",
      "updated_at": "2025-12-24T07:18:25Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Expected Behavior**\nThe model loading without any asyncio error. \n**Actual Behavior**\nThe model is loaded properly. But the notebook cell execution is stopped after the model load cell. Need to manually run after the model loading cells. \n\n**Steps to Reproduce the Problem**\n\n[tunix-error.ipynb](https://github.com/user-attachments/files/24148738/tunix-error.ipynb)\n\n<!---\nIf possible, provide a link to a [Colab Notebook](https://research.google.com/colaboratory/),\nwhich reproduces the bug.\n-->\n\n**Environment**\n\n- **OS:** Kaggle TPU Notebook\n- **Project Version:** \n\n\n| Package Name | Version |\n| :--- | :--- |\n| jax[tpu] | 0.8.1 |\n| flax | 0.12.1 |\n| optax | 0.2.6 |\n| qwix | 0.1.5 |\n| orbax-checkpoint | 0.11.31 |\n| grain | 0.2.15 |\n| google-metrax | 0.2.4 |\n| google-tunix[prod] | 0.1.5 |\n\n**Checklist**\n\n- [x] I have searched the existing issues for a similar bug report.\n- [x] I have provided all the required information in the \"Environment\" section.\n- [x] I have provided a minimal, reproducible example.\n\n**Would you like to help us fix it?**\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/884/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/874",
      "id": 3719120248,
      "node_id": "I_kwDOOTDVN87drUV4",
      "number": 874,
      "title": "Train GRPO through SGLangJax in Single or Multi Hosts with Pathways",
      "user": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "aolemila",
          "id": 214426322,
          "node_id": "U_kgDODMfi0g",
          "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/aolemila",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 0,
      "created_at": "2025-12-11T12:07:56Z",
      "updated_at": "2025-12-15T16:24:41Z",
      "closed_at": null,
      "author_association": "COLLABORATOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Note: \n- Current situation is we succeed to run `python3 scripts/grpo_demo_llama3_qwen2.py` in single and multi hosts with Pathways. The performance needs to optimize. \n- Multi hosts locates in the same Pod. Currently we have not tested the multi hosts across Pods.\n- If you want to use Pathways, please ensure you have access to GKE. Now allow list is not required.\n- How to setup GKE with Pathways? Maybe you can refer to [run_in_pathways.md](https://github.com/sgl-project/sglang-jax/blob/main/docs/features/run_in_pathways.md).\n\n# Single Host with Pathways\n\n**Environment**\n- topology: 2x2\n- hosts: 1\n- machine_type: ct6e-standard-4t\n\n**Instruction**\n```bash\n# Execute the following script on any hosts where you can connect to GKE.\nJAX_PLATFORMS=proxy \\\nJAX_BACKEND_TARGET=grpc://127.0.0.1:29000 \\\npython3 scripts/grpo_demo_llama3_qwen2.py \\\n--num-batches 4 \\\n--num-test-batches 1  \\\n--root-dir=/home/gcpuser/aolemila \\\n--model-version=meta-llama/Llama-3.2-1B-Instruct \\\n--data-source tfds \\\n--dataset gsm8k \\\n--rollout-engine sglang_jax\n```\n\n**Expected Result**\n<img width=\"1919\" height=\"154\" alt=\"image\" src=\"https://github.com/user-attachments/assets/23a00c97-67ff-4baa-862e-74bb5fa65319\" />\n\n\n# Multi Hosts in the Pod with Pathways\n\n**Environment**\n- topology: 4x4\n- hosts: 2\n- machine_type: ct6e-standard-4t\n\n**Instruction**\n```bash\n# Execute the following script on any hosts where you can connect to GKE.\nJAX_PLATFORMS=proxy \\\nJAX_BACKEND_TARGET=grpc://127.0.0.1:29000 \\\npython3 scripts/grpo_demo_llama3_qwen2.py \\\n--num-batches 4 \\\n--num-test-batches 1  \\\n--root-dir=/home/gcpuser/aolemila \\\n--model-version=meta-llama/Llama-3.2-1B-Instruct \\\n--data-source tfds \\\n--dataset gsm8k \\\n--rollout-engine sglang_jax  \\\n--rollout-tp 8 \\\n--cluster-setup disaggregated-2-way\n```\n\nNote: `--rollout-tp 8` and `--cluster-setup disaggregated-2-way` are required due to SGLangJax lacks to support DP now. It will support DP soon.\n\n**Expected Result**\n<img width=\"952\" height=\"341\" alt=\"Pasted Graphic 9\" src=\"https://github.com/user-attachments/assets/988abdb1-3b8f-4487-b0fa-ed96c91c1d50\" />",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/874/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/842",
      "id": 3697382388,
      "node_id": "I_kwDOOTDVN87cYZP0",
      "number": 842,
      "title": "gemma3-1b-it bad rollout.",
      "user": {
        "login": "carlesoctav",
        "id": 106587439,
        "node_id": "U_kgDOBlplLw",
        "avatar_url": "https://avatars.githubusercontent.com/u/106587439?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/carlesoctav",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-12-05T03:46:25Z",
      "updated_at": "2025-12-27T21:44:04Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "this is from examples/rl/grpo/gsm8k/run_gemma3_1b.sh\n\n1. issue it start with random token like `es` `ery`, and more\n2. it doesnt stop at <end_of_turn>, adding `eos_token` and <end_of_turn> token_ids to `eos_token` on the rollout config help stop this but i dont see this issue on gemma2 1b.sh\n3. even on the fullfinetune (without lora) i still get this issue.\n\n```\nI1205 03:40:18.077061 139779238873088 dataset_info.py:707] Load dataset info from data/train/gsm8k/1.0.0\nI1205 03:40:18.081385 139779238873088 dataset_builder.py:892] Found random access formats: . Chose to use FileFormat.ARRAY_RECORD. Overriding file format in the dataset info.\nI1205 03:40:18.117426 139779238873088 rl_learner.py:580] Training with full_batch_size=4, mini_batch_size=4, train_micro_batch_size=2, self._rollout_micro_batch_size=2, self._compute_logps_micro_batch_size=2, grad_acc_steps=2\nI1205 03:41:39.454670 139699820918336 gsm8k.py:112] START ============================\nI1205 03:41:39.455143 139699820918336 gsm8k.py:113] Question: Jane is painting her fingernails. She applies a base coat that takes 2 minutes to dry, two color coats that take 3 minutes each to dry, and a clear top coat that takes 5 minutes to dry. How many minutes total does Jane spend waiting for her nail polish to dry?\nI1205 03:41:39.455501 139699820918336 gsm8k.py:114] Answer: 13\nI1205 03:41:39.455768 139699820918336 gsm8k.py:115] Response: es:\nLet $T_b$ be the time taken for the base coat to dry, $T_c$ be the time taken for the first color coat to dry, and $T_t$ be the time taken for the clear top coat to dry.\nWe are given that $T_b = 2$ minutes, $T_c = 3$ minutes, and $T_t = 5$ minutes.\nThe total time spent painting is the sum of the times taken for each step.\nTotal time = $T_b + T_c + T_t = 2 + 3 + 5 = 10$ minutes.\nTherefore, Jane spends 10 minutes waiting for her nail polish to dry.\n\n<answer>10</answer><end_of_turn> escort<end_of_turn>environmentalist<end_of_turn><end_of_turn>environmentalist<end_of_turn><end_of_turn>environmentalist<end_of_turn><end_of_turn>environmentalist<end_of_turn>\n<end_of_turn> पर्यावरणीय\n<end_of_turn><end_of_turn><end_of_turn>\n<end_of_turn><end_of_turn>\n<end_of_turn>\n<end_of_turn><end_of_turn>\n<end_of_turn><end_of_turn>\n<end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end_of_turn><end\n```",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/842/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/832",
      "id": 3690797110,
      "node_id": "I_kwDOOTDVN87b_Rg2",
      "number": 832,
      "title": "This repo is trying to do too much",
      "user": {
        "login": "OhadRubin",
        "id": 4252994,
        "node_id": "MDQ6VXNlcjQyNTI5OTQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4252994?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/OhadRubin",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 9550638357,
          "node_id": "LA_kwDOOTDVN88AAAACOUMtFQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:others",
          "name": "type:others",
          "color": "bfd4f2",
          "default": false,
          "description": ""
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-12-03T15:49:01Z",
      "updated_at": "2026-01-28T04:59:30Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "The future is adopting [skyrl-tx](https://github.com/NovaSky-AI/SkyRL/tree/main/skyrl-tx) and using [verifiers](https://verifiers.readthedocs.io/en/latest/) for handling all the environments code.\n\nThis way anytime someone writes code that uses tinker it is able to run on TPUs.\n\nThis is all the API someone using your library needs (taken from https://tinker-docs.thinkingmachines.ai/):\n```\nforward_backward - Perform a forward pass and a backward pass, accumulating the gradient. \noptim_step - Update weights based on the accumulated gradient.\nsample - Generate tokens for interaction, evaluation, or RL actions. \nsave_state - Save training progress for resumption.\n```\n\nI will point you towards [this integration](https://github.com/thinking-machines-lab/tinker-cookbook/tree/main/tinker_cookbook/recipes/verifiers_rl) that allows one to train RL agents on any env from the Environments Hub (hundreds) using tinker.\n\n\nskyrl-tx acts as a backend for tinker and allows one to run any tinker client on TPUs.\nRight now it looks experimental, but it has a lot of potential.\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/832/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/816",
      "id": 3680148788,
      "node_id": "I_kwDOOTDVN87bWp00",
      "number": 816,
      "title": "GRPO Evaluation Fails When TRAIN_MICRO_BATCH_SIZE < num_generations",
      "user": {
        "login": "aaghaazkhan",
        "id": 177999751,
        "node_id": "U_kgDOCpwPhw",
        "avatar_url": "https://avatars.githubusercontent.com/u/177999751?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aaghaazkhan",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-12-01T09:45:49Z",
      "updated_at": "2025-12-13T15:03:41Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "## Expected Behavior\n\nEvaluation should work consistently regardless of the value of `TRAIN_MICRO_BATCH_SIZE`.\n\n## Actual Behavior\n\nWhen `TRAIN_MICRO_BATCH_SIZE = 1` and the internal GRPO micro-batch size becomes smaller than `num_generations`, GRPO grouping breaks silently.\n\nThis causes:\n* Pre-training evaluation: `0% accuracy`\n* Post-training evaluation: all metrics `0%`\n* `format_accuracy = 0%`\n* `partial_accuracy = 0%`\n* `accuracy = 0%`\n\nThis occurs even though the model generates valid CURE-style completions, and the same code works correctly when micro-batch size ≥ num_generations, even if `TRAIN_MICRO_BATCH_SIZE` itself is 1.\n\n**Root cause:** The issue is not \"micro-batch size = 1\", but that the effective batch slicing becomes smaller than `num_generations`, causing GRPO to reshape rewards incorrectly.\n\n## Steps to Reproduce\n\n1. Run Tunix GRPO training with:\n```python\n   TRAIN_MICRO_BATCH_SIZE = 1\n   NUM_GENERATIONS = 2   # (default)\n```\n\n2. Train normally (training runs without any errors).\n\n3. Run evaluation:\n```python\n   evaluate(test_dataset, sampler, **GENERATION_CONFIGS[\"greedy\"])\n```\n\n4. Observe that all evaluation metrics are:\n```\n   accuracy = 0%\n   partial_accuracy = 0%\n   format_accuracy = 0%\n```\n\n## Environment\n\n* **OS:** Kaggle TPU environment (Debian-based)\n* **Project Version:** \n  * Tunix: `google-tunix[prod]==0.1.3`\n  * JAX: Kaggle TPU default\n* **TPU:** v3-8\n* **Python:** Kaggle default kernel\n* **Model:** Gemma 3 1B IT\n* **Training:** GRPO + LoRA + QWIX\n* **Notebook Environment:** Kaggle Notebooks\n\n## Checklist\n\n- [x] I have searched the existing issues for a similar bug report.\n- [x] I have provided all the required information in the \"Environment\" section.\n- [x] I have provided a minimal, reproducible example.\n\n## Would you like to help us fix it?\n\n**Yes**, I can provide:\n* A minimal reproducible Kaggle Notebook\n* Logs and evaluation outputs\n* Sample completions showing correct CURE structure\n* Any additional debugging information needed\n\n<img width=\"1389\" height=\"677\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/1055cef5-ac76-4561-8b83-5fc21fafd69c\" />",
      "closed_by": {
        "login": "aaghaazkhan",
        "id": 177999751,
        "node_id": "U_kgDOCpwPhw",
        "avatar_url": "https://avatars.githubusercontent.com/u/177999751?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aaghaazkhan",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/816/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": "reopened",
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/809",
      "id": 3668872383,
      "node_id": "I_kwDOOTDVN87aroy_",
      "number": 809,
      "title": "Single-item batches truncate sampler token_buffer instead of populating it",
      "user": {
        "login": "Cascoopman",
        "id": 58267444,
        "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
        "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Cascoopman",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-11-26T19:56:32Z",
      "updated_at": "2025-11-28T04:10:27Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I am doing the Tunix Kaggle competition but run into bugs when setting the TRAIN_MICRO_BATCH_SIZE to 1 in this[example notebook](https://www.kaggle.com/code/windmaple/grpo-demo-gemma2-2b).\n\nhttps://github.com/google/tunix/blob/1fe360d47961abd1011d427adeb336a429857fbb/tunix/generate/sampler.py#L328-L330\n\n### Description\nWhen invoking `tunix.generate.sampler.Sampler` with `batch_size=1`, the generated output is always truncated after just a few tokens; the call never reaches `<end_of_turn>` even though the same prompt works fine with `batch_size=2`. Digging into the sampler code shows that:\n- `token_buffer` is initialized in `init_sample_state()` as `(batch_size, total_sampling_steps)` (e.g., (1, 896)).\n- `_sample()` is supposed to write each new token via `token_buffer = token_buffer.at[:, decoding_step + 1].set(next_token_candidate)`.\n- During the JAX `while_loop` (`_decode_fn`), `_sample_step` repeatedly calls `_sample()`, but when `batch_size=1` the buffer never grows beyond the first 2–4 entries.\n- By the time token extraction runs (`__call__`, lines 735-782), `token_buffer` has shape `(1, 2)` (or `(1, 4)`), so `token_buffer[max_prompt_length:]` only contains a few tokens and `find_first_eos_idx` returns immediately, resulting in truncated outputs. Running the same logic with `batch_size=2` produces a normal-length buffer and completion.\n\nI added debug host-callbacks around `_sample_step` to log `token_buffer.shape` before/after each iteration and the logs confirm that the `.at[:, decoding_step + 1].set(...)` update silently stops writing when there’s a single example. This makes the sampler unusable when `TRAIN_MICRO_BATCH_SIZE=1`, yet it works fine for larger batches.\n\n### Steps to reproduce\n1. Instantiate the sampler used in `gemma2-grpo-original-demo.ipynb`, e.g. the Tunix transformer + tokenizer + cache config.\n2. Call `sampler(input_strings=[prompt], ...)` with `max_generation_steps` large enough to reach `<end_of_turn>`, using greedy sampling (`temperature=0.0001`, `top_k=1`).\n3. Inspect `result.tokens[0]` / `result.text[0]` – the output is only a few tokens long and often doesn’t end with `<end_of_turn>`.\n4. Repeat step 2 with `input_strings=[prompt, prompt]` (batch_size=2) and observe a normal-length completion.\n\n### Expected behavior\n`token_buffer` should stay `(1, total_sampling_steps)` and `_sample()` should keep writing tokens until EOS, just like it does when `batch_size=2`.\n\n### Actual behavior\n`token_buffer` stops at ~2-4 slots, so the extractor only returns the first few tokens and the sample is truncated. This happens inside `_sample()` / `_sample_step`, meaning the loop never expands the buffer for single-item batches.\n\n### Proposed fix\nInvestigate how `_sample()` / `_sample_step` behaves under JAX when `batch_size=1`. The `.at` update may be optimized out or shape-inferred incorrectly. Ensuring the `token_buffer` update runs (and that `token_buffer` remains `(batch_size, total_sampling_steps)`) should fix the bug. If necessary, add a test for `batch_size=1` to catch regressions.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/809/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        963
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/802",
      "id": 3662090092,
      "node_id": "I_kwDOOTDVN87aRw9s",
      "number": 802,
      "title": "[Bug] Fail to run train_deepscaler_nb.py",
      "user": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "vector-one",
        "id": 165829168,
        "node_id": "U_kgDOCeJaMA",
        "avatar_url": "https://avatars.githubusercontent.com/u/165829168?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/vector-one",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "vector-one",
          "id": 165829168,
          "node_id": "U_kgDOCeJaMA",
          "avatar_url": "https://avatars.githubusercontent.com/u/165829168?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/vector-one",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 2,
      "created_at": "2025-11-25T08:56:00Z",
      "updated_at": "2026-01-09T11:49:31Z",
      "closed_at": null,
      "author_association": "COLLABORATOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Expected Behavior**\n\nSuccessfully run `python3 examples/deepscaler/train_deepscaler_nb.py`.\n\n**Actual Behavior**\n\n<img width=\"1570\" height=\"446\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/1d9fe50e-b483-497a-918a-85b371f9be66\" />\n\n**Steps to Reproduce the Problem**\n\n1. `python3 examples/deepscaler/train_deepscaler_nb.py`\n\n<!---\nIf possible, provide a link to a [Colab Notebook](https://research.google.com/colaboratory/),\nwhich reproduces the bug.\n-->\n\n**Environment**\n\n- **OS:** [e.g., Ubuntu, etc.] Ubuntu-22.04, tpu-v6e-4.\n- **Project Version:** [e.g., 0.0.1] main-096080ffbb6529353b8e0897142bc425ed57fb3b\n\n**Checklist**\n\n- [x] I have searched the existing issues for a similar bug report.\n- [x] I have provided all the required information in the \"Environment\" section.\n- [x] I have provided a minimal, reproducible example.\n\n**Would you like to help us fix it?**\n\nMaybe I need a correct google package to run.\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/802/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        958
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/780",
      "id": 3649038402,
      "node_id": "I_kwDOOTDVN87Zf-hC",
      "number": 780,
      "title": "vLLM sampler accesses attribute that does not exist",
      "user": {
        "login": "darsnack",
        "id": 4811350,
        "node_id": "MDQ6VXNlcjQ4MTEzNTA=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4811350?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/darsnack",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-11-20T20:52:41Z",
      "updated_at": "2025-11-21T22:21:39Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Expected Behavior**\n\nRunning generation (for GRPO) with vLLM sampler should access attributes that actually exist.\n\n**Actual Behavior**\n\nCurrently, attempting to use the vLLM sampler results in:\n```\n    return self.llm.llm_engine.model_executor.driver_worker.model_runner\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAttributeError: 'MultiprocExecutor' object has no attribute 'driver_worker'\n```\n\nAFAICT, there is no `driver_worker` attribute available. My guess is that there is a version mismatch between the expected and installed vLLM API?\n\n**Steps to Reproduce the Problem**\n\nN/A\n\n**Environment**\n\n- **OS:** Ubuntu\n- **Project Version:** 0.1.4\n\n**Checklist**\n\n- [x] I have searched the existing issues for a similar bug report.\n- [x] I have provided all the required information in the \"Environment\" section.\n- [ ] I have provided a minimal, reproducible example.\n\n**Would you like to help us fix it?**\n\nWith some guidance, I can help.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/780/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/761",
      "id": 3637837083,
      "node_id": "I_kwDOOTDVN87Y1P0b",
      "number": 761,
      "title": "Please consider the following when creating a PR:",
      "user": {
        "login": "Tsukimarf",
        "id": 215229009,
        "node_id": "U_kgDODNQiUQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Tsukimarf",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274170,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1eg",
          "url": "https://api.github.com/repos/google/tunix/labels/wontfix",
          "name": "wontfix",
          "color": "ffffff",
          "default": true,
          "description": "This will not be worked on"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-11-18T12:03:35Z",
      "updated_at": "2025-11-20T17:15:44Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Of course! When creating a Pull Request (PR), providing clear and comprehensive context is crucial for a smooth and efficient review process. Here is a detailed guide on what to consider, structured for easy copying and pasting into your PR template.\n\n---\n\nPull Request Creation Checklist & Guidelines\n\nPlease review the following points before submitting your PR. This helps reviewers understand your changes and accelerates the merge process.\n\n1. PR Title & Description\n\n· Title: Use a clear, descriptive title following conventional commit standards (e.g., feat: add user profile endpoint, fix: resolve login crash on iOS).\n· Description:\n  · What? Provide a concise summary of the changes.\n  · Why? Explain the reason for the change (e.g., bug ticket number, new feature request, refactoring need).\n  · How? Briefly explain the implementation approach, if relevant.\n  · Screenshots/Recordings: For UI changes, always include before-and-after screenshots or a screen recording.\n  · Issue Link: Link to the related GitHub/GitLab/Jira issue using keywords (e.g., Fixes #123, Closes PROJECT-456).\n\n2. Scope & Type of Change\n\n· Type: Please label the PR appropriately (e.g., feat, fix, docs, style, refactor, test, chore).\n· Scope: Is this a breaking change? If yes, it must be clearly highlighted in the title and description.\n\n3. Code Quality & Testing\n\n· Self-Review: I have reviewed my own code.\n· Code Style: The code follows the project's established style and conventions.\n· Comments: Code is self-documenting where possible. Complex logic has clear comments.\n· Tests:\n  · I have added/updated unit tests or integration tests that prove my fix is effective or that my feature works.\n  · All new and existing tests pass locally.\n  · For UI changes, I have tested them manually across major browsers (Chrome, Firefox, Safari, Edge) or relevant platforms.\n\n4. Pre-Submission Checklist\n\n· My code builds without any errors or warnings.\n· I have rebased/merged the latest changes from the target branch (e.g., main, develop).\n· I have resolved any merge conflicts.\n· I have ensured my branch name is meaningful (e.g., fix/login-issue, feature/payment-integration).\n\n5. Dependencies & Documentation\n\n· Dependencies: Are there any new dependencies? If yes, justify their need.\n· Documentation:\n  · I have updated the relevant documentation (README, API docs, code comments) to reflect the changes.\n  · My changes generate no new warnings in the documentation build.\n\n---\n\nExample PR Description Template\n\nYou can copy and paste the template below directly into your PR description.\n\n```\n## What does this PR do?\n<!-- A brief description of the change. -->\n\n## Why is this change needed?\n<!-- Link to the issue or explain the problem being solved. -->\n\n## How was it implemented?\n<!-- Explain your approach, key technical decisions, and why you chose this solution. -->\n\n## How can it be tested?\n<!-- List steps for a reviewer to verify the changes. Include test data if needed. -->\n1.\n2.\n3.\n\n## Screenshots (for UI changes)\n| Before | After |\n|--------|-------|\n| <!-- Upload before image --> | <!-- Upload after image --> |\n\n## Checklist\n- [ ] I have performed a self-review of my own code.\n- [ ] I have commented my code, particularly in hard-to-understand areas.\n- [ ] I have added/updated tests that prove my fix is effective or that my feature works.\n- [ ] All new and existing tests pass.\n- [ ] My changes require a change to the documentation.\n- [ ] I have updated the documentation accordingly.\n- [ ] I have tested the changes on [relevant platforms/browsers].\n\n**Issue Link:** `Fixes #<issue_number>`\n```\n\nBy providing this level of detail, you show respect for your reviewers' time and significantly increase the chances of a quick, high-quality review. Thank you!",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/761/reactions",
        "total_count": 2,
        "+1": 2,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/698",
      "id": 3594982749,
      "node_id": "I_kwDOOTDVN87WRxVd",
      "number": 698,
      "title": "GRPO training fails in multi-process mode",
      "user": {
        "login": "yhtang",
        "id": 6081524,
        "node_id": "MDQ6VXNlcjYwODE1MjQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/6081524?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/yhtang",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 3,
      "created_at": "2025-11-06T09:51:04Z",
      "updated_at": "2025-11-07T21:43:26Z",
      "closed_at": null,
      "author_association": "COLLABORATOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Expected Behavior**\nGRPO training with Tunix in multi-process SPMD (e.g., 2 GPU nodes) should generate rollouts and compute advantages without failures.\n\n**Actual Behavior**\nCrash during rollout sampling when iterating a distributed `jax.Array`:\n- `AssertionError` at `jax/_src/array.py:380`: `assert self.is_fully_replicated or self.is_fully_addressable`\n- Triggered in `tunix/generate/sampler.py` while doing `zip(out_tokens, lengths)`\n\n**Steps to Reproduce the Problem**\n1. Add `jax.distributed.initialize()` at the beginning of the GRPO example script.\n2. Run the GRPO demo\n```\nsrun -u --label --ntasks=2 --ntasks-per-node=1 -c${SLURM_CPUS_ON_NODE} python <grpo-script>\n```\n\n**Checklist**\n- [x] I have searched the existing issues for a similar bug report.\n- [x] I have provided all the required information in the \"Environment\" section.\n- [x] I have provided a minimal, reproducible example.\n\n**Would you like to help us fix it?**\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/698/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        834
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/687",
      "id": 3590019636,
      "node_id": "I_kwDOOTDVN87V-1o0",
      "number": 687,
      "title": "grpo_demo.ipynb: Excessive output",
      "user": {
        "login": "cool-RR",
        "id": 56778,
        "node_id": "MDQ6VXNlcjU2Nzc4",
        "avatar_url": "https://avatars.githubusercontent.com/u/56778?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/cool-RR",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 4,
      "created_at": "2025-11-05T09:10:22Z",
      "updated_at": "2025-11-06T22:28:28Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "This isn't an outright bug, just something that makes it difficult to work with `grpo_demo.ipynb`.\n\nThe cell with `grpo_trainer.train` produces a huge amount of text output. It becomes 95% of the notebook. This makes it difficult to scroll around the notebook or even tell when it's finished. I understand that you would like to show samples of outputs, but if it's important, I'd suggest showing a much smaller selection of outputs to keep the notebook workable.\n\nIf you agree with this I'll be happy to help.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/687/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/686",
      "id": 3590010335,
      "node_id": "I_kwDOOTDVN87V-zXf",
      "number": 686,
      "title": "\"RuntimeError: cannot enter context\" in grpo_demo.ipynb",
      "user": {
        "login": "cool-RR",
        "id": 56778,
        "node_id": "MDQ6VXNlcjU2Nzc4",
        "avatar_url": "https://avatars.githubusercontent.com/u/56778?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/cool-RR",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 6,
      "created_at": "2025-11-05T09:07:51Z",
      "updated_at": "2025-11-07T07:12:04Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I attempted to run `grpo_demo.ipynb` to reproduce the training you've shown in [your blog post](https://developers.googleblog.com/en/introducing-tunix-a-jax-native-library-for-llm-post-training/).\n\nI've provisioned a v5e-4 machine from GCP and ran the notebook.\n\nIn the code block that invokes `get_gemma_ref_model`, I get lots of error text, including:\n\n```\nERROR:asyncio:Exception in callback Task.__step()\nhandle: <Handle Task.__step()>\nTraceback (most recent call last):\n  File \"/home/ramrachum/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/asyncio/events.py\", line 89, in _run\n    self._context.run(self._callback, *self._args)\n    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nRuntimeError: cannot enter context: <_contextvars.Context object at 0x7f94a16454c0> is already entered\n\n```\n\nI've continued to run the notebook, not sure whether this error is going to adversly affect the results. When I got to the `grpo_trainer.train` cell and ran it, I got similar exceptions:\n\n```\nERROR:asyncio:Exception in callback Task.__step()\nhandle: <Handle Task.__step()>\nTraceback (most recent call last):\n  File \"/home/ramrachum/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/asyncio/events.py\", line 89, in _run\n    self._context.run(self._callback, *self._args)\n    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nRuntimeError: cannot enter context: <_contextvars.Context object at 0x7f94a16454c0> is already entered\n```\n\nHere is an uploaded copy of the notebook showing the error: https://colab.research.google.com/drive/1cMd3jKUiyUUGBvMELtaPthdqIwNImdNy\n\nNote that I did not run this on Colab, I ran it on Jupyterlab on a GCP machine, because Colab does not provide a v5e-4 machine as far as I know. \n\n**Environment**\n\n- **OS:** Ubuntu 22.04.3 LTS\n- **Project Version:** `git+https://github.com/google/tunix@f0d5d1e63e24f42647fd4e6122641d689f8bfd0e`\n\n**Checklist**\n\n- [X] I have searched the existing issues for a similar bug report.\n- [X] I have provided all the required information in the \"Environment\" section.\n- [X] I have provided a minimal, reproducible example.\n\n**Would you like to help us fix it?**\n\nYes.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/686/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/667",
      "id": 3581110948,
      "node_id": "I_kwDOOTDVN87Vc2qk",
      "number": 667,
      "title": "Failed build: Tunix Package Tests",
      "user": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 9574535587,
          "node_id": "LA_kwDOOTDVN88AAAACOq_Row",
          "url": "https://api.github.com/repos/google/tunix/labels/build%20failed",
          "name": "build failed",
          "color": "ededed",
          "default": false,
          "description": null
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 156,
      "created_at": "2025-11-03T08:47:17Z",
      "updated_at": "2026-02-17T13:56:06Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "GitHub Actions workflow [Tunix Package Tests #1439](https://github.com/google/tunix/actions/runs/19027914124) failed.\n\nEvent: schedule\nBranch: [main](https://github.com/google/tunix/tree/main)\nCommit: [1c221aee25158aafb5a83576ea4957d63b2172f4](https://github.com/google/tunix/commit/1c221aee25158aafb5a83576ea4957d63b2172f4)\n\n<sup><i>Created by [jayqi/failed-build-issue-action](https://github.com/jayqi/failed-build-issue-action)</i></sup>",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/667/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/612",
      "id": 3540855242,
      "node_id": "I_kwDOOTDVN87TDSnK",
      "number": 612,
      "title": "A unified API for model loading",
      "user": {
        "login": "heydaari",
        "id": 95540171,
        "node_id": "U_kgDOBbHTyw",
        "avatar_url": "https://avatars.githubusercontent.com/u/95540171?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/heydaari",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "tianshub",
        "id": 4454178,
        "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/tianshub",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-10-22T13:20:47Z",
      "updated_at": "2025-11-06T17:28:03Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Currently, for loading different models in Tunix we need to load the model and its params_loader in a very hard python specific module loading (e.g. from tunix.models.qwen3.params import create_model_from_safe_tensors or from tunix.models.qwen3 import model as model_lib)\n\nI think it is based on best practices that creating a higher level abstraction like AutoModel for model creation and loading it weights must be beneficial and unifying all the models under the same abstract AutoModel\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/612/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/611",
      "id": 3540788499,
      "node_id": "I_kwDOOTDVN87TDCUT",
      "number": 611,
      "title": "Gemma3 12B loading error",
      "user": {
        "login": "heydaari",
        "id": 95540171,
        "node_id": "U_kgDOBbHTyw",
        "avatar_url": "https://avatars.githubusercontent.com/u/95540171?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/heydaari",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "tianshub",
        "id": 4454178,
        "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/tianshub",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 8,
      "created_at": "2025-10-22T13:02:56Z",
      "updated_at": "2026-01-12T19:59:07Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "**Actual Behavior**\n```\n---------------------------------------------------------------------------\nValueError                                Traceback (most recent call last)\nFile /usr/local/lib/python3.12/site-packages/tunix/models/safetensors_loader.py:106, in load_and_create_model(file_dir, model_class, config, key_mapping, mesh, preprocess_fn, dtype)\n    105 v = sf.get_tensor(k_name)\n--> 106 jax_key_mapped, transform = torch_key_to_jax_key(key_map, k_name)\n    108 if transform is not None:\n\nFile /usr/local/lib/python3.12/site-packages/tunix/models/safetensors_loader.py:35, in torch_key_to_jax_key(mapping, source_key)\n     34 if len(subs) != 1:\n---> 35   raise ValueError(f\"Only one key should be found: {subs} for {source_key}\")\n     36 else:\n\nValueError: Only one key should be found: [] for language_model.model.layers.10.input_layernorm.weight\n\nThe above exception was the direct cause of the following exception:\n\nRuntimeError                              Traceback (most recent call last)\nCell In[7], line 9\n      7 mesh = jax.make_mesh(*MESH)\n      8 with mesh:\n----> 9   gemma3 = params_lib.create_model_from_safe_tensors(\n     10       MODEL_CP_PATH, config, mesh\n     11   )\n     12   nnx.display(gemma3)\n\nFile /usr/local/lib/python3.12/site-packages/tunix/models/gemma3/params_safetensors.py:200, in create_model_from_safe_tensors(file_dir, config, mesh, dtype)\n    194 def create_model_from_safe_tensors(\n    195     file_dir: str,\n    196     config: model_lib.ModelConfig,\n    197     mesh: jax.sharding.Mesh | None = None,\n    198     dtype: jnp.dtype | None = None,\n    199 ):\n--> 200   return safetensors_loader.load_and_create_model(\n    201       file_dir=file_dir,\n    202       model_class=model_lib.Gemma3,\n    203       config=config,\n    204       key_mapping=_get_key_and_transform_mapping,\n    205       mesh=mesh,\n    206       preprocess_fn=_make_preprocess_fn(config),\n    207       dtype=dtype,\n    208   )\n\nFile /usr/local/lib/python3.12/site-packages/tunix/models/safetensors_loader.py:126, in load_and_create_model(file_dir, model_class, config, key_mapping, mesh, preprocess_fn, dtype)\n    123       file_loaded_tensors[jax_key_mapped] = current_arr\n    125     except Exception as e:\n--> 126       raise RuntimeError(\n    127           f\"Failed to load tensor {k_name} from file {f.name}: {e}\"\n    128       ) from e\n    130 # Apply preprocessing if provided (e.g., for MoE expert stacking)\n    131 if preprocess_fn is not None:\n\nRuntimeError: Failed to load tensor language_model.model.layers.10.input_layernorm.weight from file model-00002-of-00005.safetensors: Only one key should be found: [] for language_model.model.layers.10.input_layernorm.weight\n```\n\n**Steps to Reproduce the Problem**\nrun this code on Kaggle TPUs\n\n```python\nimport os\nos.environ['HF_TOKEN'] = \"YO-TOKEN\"\n\nimport functools\nfrom flax import nnx\nfrom huggingface_hub import snapshot_download\nimport humanize\nimport jax\nfrom tunix.models.gemma3 import model as model_lib\nfrom tunix.models.gemma3 import params_safetensors as params_lib\n\nmodel_id = \"google/gemma-3-12b-it\"\nignore_patterns = [\n    \"*.pth\",  # Ignore PyTorch .pth weight files\n]\nprint(f\"Downloading {model_id} from Hugging Face...\")\nlocal_model_path = snapshot_download(\n    repo_id=model_id, ignore_patterns=ignore_patterns\n)\nprint(f\"Model successfully downloaded to: {local_model_path}\")\n\nMODEL_CP_PATH = local_model_path\n\nconfig = (\n    model_lib.ModelConfig.gemma3_12b()\n)  # pick correponding config based on model version\nMESH = [(8, 1), (\"fsdp\", \"tp\")]  # update this based on your # TPU devices\nmesh = jax.make_mesh(*MESH)\nwith mesh:\n  gemma3 = params_lib.create_model_from_safe_tensors(\n      MODEL_CP_PATH, config, mesh\n  )\n  nnx.display(gemma3)\n\n```\n\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/611/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/587",
      "id": 3526795928,
      "node_id": "I_kwDOOTDVN87SNqKY",
      "number": 587,
      "title": "Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).",
      "user": {
        "login": "Tsukimarf",
        "id": 215229009,
        "node_id": "U_kgDODNQiUQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Tsukimarf",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8691895442,
          "node_id": "LA_kwDOOTDVN88AAAACBhPMkg",
          "url": "https://api.github.com/repos/google/tunix/labels/CLA:yes",
          "name": "CLA:yes",
          "color": "C2E0C6",
          "default": false,
          "description": "Need to sign a Contributor License Agreement (CLA)"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-10-17T16:31:28Z",
      "updated_at": "2025-10-29T20:53:35Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).\n\nView this [failed invocation](https://github.com/google/tunix/pull/585/checks?check_run_id=53025141866) of the CLA check for more information.\n\nFor the most up to date status, view the checks section at the bottom of the pull request.\n\n_Originally posted by @google-cla in https://github.com/google/tunix/pull/585#issuecomment-3415973328_",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/587/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/560",
      "id": 3506511461,
      "node_id": "I_kwDOOTDVN87RAR5l",
      "number": 560,
      "title": "How to train on multi host tpu pod",
      "user": {
        "login": "siddagra",
        "id": 52118936,
        "node_id": "MDQ6VXNlcjUyMTE4OTM2",
        "avatar_url": "https://avatars.githubusercontent.com/u/52118936?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/siddagra",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274168,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1eA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:support",
          "name": "type:support",
          "color": "d876e3",
          "default": false,
          "description": "Further information is requested"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "tianshub",
        "id": 4454178,
        "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/tianshub",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 23,
      "created_at": "2025-10-12T00:54:22Z",
      "updated_at": "2025-11-11T00:33:33Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "How to train on multi host tpu pod like TPUv4-32? It says I need to ssh into every machine but I am confused how it works for Tunix library specifically ",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/560/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/510",
      "id": 3488632386,
      "node_id": "I_kwDOOTDVN87P8E5C",
      "number": 510,
      "title": "VLM support for DPO",
      "user": {
        "login": "immuntasir",
        "id": 12914001,
        "node_id": "MDQ6VXNlcjEyOTE0MDAx",
        "avatar_url": "https://avatars.githubusercontent.com/u/12914001?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/immuntasir",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "abheesht17",
        "id": 31360468,
        "node_id": "MDQ6VXNlcjMxMzYwNDY4",
        "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/abheesht17",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-10-06T18:56:29Z",
      "updated_at": "2025-10-23T22:08:55Z",
      "closed_at": null,
      "author_association": "CONTRIBUTOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "DPO (and other SFT and RL methods) only supports text-only models as of now. VLM support will be very helpful.\n\n**Checklist**\n\n- [x ] I have searched the existing issues for similar feature requests.\n- [x ] This is not a support question (please use the \"bug template\" for that).\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/510/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        511
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/509",
      "id": 3485856576,
      "node_id": "I_kwDOOTDVN87PxfNA",
      "number": 509,
      "title": "Add larger Qwen 2.5 models",
      "user": {
        "login": "abheesht17",
        "id": 31360468,
        "node_id": "MDQ6VXNlcjMxMzYwNDY4",
        "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/abheesht17",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 2,
      "created_at": "2025-10-06T06:31:51Z",
      "updated_at": "2025-11-06T17:29:25Z",
      "closed_at": null,
      "author_association": "COLLABORATOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Tunix has Qwen 2.5 0.5B, 3B, 7B models. Let's add the larger presets too!",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/509/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/489",
      "id": 3479372799,
      "node_id": "I_kwDOOTDVN87PYwP_",
      "number": 489,
      "title": "Failed build: Tunix Package Tests",
      "user": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 9357816432,
          "node_id": "LA_kwDOOTDVN88AAAACLcTycA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:build/install",
          "name": "type:build/install",
          "color": "ededed",
          "default": false,
          "description": "Issue related to build/install"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 14,
      "created_at": "2025-10-03T00:35:04Z",
      "updated_at": "2025-11-06T17:30:36Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "GitHub Actions workflow [Tunix Package Tests #462](https://github.com/google/tunix/actions/runs/18209232188) failed.\n\nEvent: schedule\nBranch: [main](https://github.com/google/tunix/tree/main)\nCommit: [f8baab9b0e2e7a61e258c325dad304cab9be60b5](https://github.com/google/tunix/commit/f8baab9b0e2e7a61e258c325dad304cab9be60b5)\n\n<sup><i>Created by [jayqi/failed-build-issue-action](https://github.com/jayqi/failed-build-issue-action)</i></sup>",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/489/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/390",
      "id": 3455375559,
      "node_id": "I_kwDOOTDVN87N9NjH",
      "number": 390,
      "title": "RL Bug/Issue Tracker",
      "user": {
        "login": "abheesht17",
        "id": 31360468,
        "node_id": "MDQ6VXNlcjMxMzYwNDY4",
        "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/abheesht17",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 0,
      "created_at": "2025-09-26T00:07:28Z",
      "updated_at": "2025-11-06T17:31:28Z",
      "closed_at": null,
      "author_association": "COLLABORATOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "This issue is a running tracker of all RL bugs/issues we identify:\n\n- [ ] Logging for metrics returned by loss functions via `aux` is at a `self._iter_steps` level, whereas other metrics are logged at a `self.global_steps` level.\n- [ ] The progress bar for GRPO/PPO is at a `self._iter_steps` level. We should possibly unify this with how we log metrics. It's a bit confusing for the user to pass `max_steps` at a `self._iter_steps`, and not at `self.global_steps` level.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/390/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": [
        491
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/256",
      "id": 3386809801,
      "node_id": "I_kwDOOTDVN87J3p3J",
      "number": 256,
      "title": "Question: how to run tunix with vLLM?",
      "user": {
        "login": "OhadRubin",
        "id": 4252994,
        "node_id": "MDQ6VXNlcjQyNTI5OTQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4252994?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/OhadRubin",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274152,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1aA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:bug",
          "name": "type:bug",
          "color": "d73a4a",
          "default": false,
          "description": "Something isn't working"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 9,
      "created_at": "2025-09-05T08:59:39Z",
      "updated_at": "2026-01-28T20:41:43Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Hey, \nWould you guys mind pinning the requirements for vLLM usage? or generally providing a bit more information about it?\nI'm not able to use tunix in that setup.\nMinimal steps to recreate on a fresh TPUv4:\n\n\n\n```\ncd ~\ngit clone https://github.com/vllm-project/vllm\ngit clone https://github.com/google/tunix\ncd tunix\njsonl_to_json(){ python -c 'import sys,json;p=sys.argv[1];d=[json.loads(l) for l in open(p)];open(p,\"w\").write(json.dumps(d))' \"$1\"; }\nmkdir -p root-dir/rl/grpo/data\nwget https://raw.githubusercontent.com/openai/grade-school-math/3101c7d5072418e28b9008a6636bde82a006892c/grade_school_math/data/train.jsonl -O root-dir/rl/grpo/data/gsm8k_train2.json\nwget https://raw.githubusercontent.com/openai/grade-school-math/2909d34ef28520753df82a2234c357259d254aa8/grade_school_math/data/test.jsonl -O root-dir/rl/grpo/data/gsm8k_test.json\njsonl_to_json root-dir/rl/grpo/data/gsm8k_train.json\njsonl_to_json root-dir/rl/grpo/data/gsm8k_test.json\n\n# build the vllm docker container like https://docs.vllm.ai/en/v0.5.5/getting_started/tpu-installation.html instructs\n(cd ~/vllm && sudo docker build -f docker/Dockerfile.tpu -t vllm-tpu .) \n# run it in bash mode with the tunix repo mounted\n(cd ~/vllm && sudo docker run --privileged --net host --shm-size=16G -v /home/$USER/tunix:/workspace/tunix -it vllm-tpu)\n# in the bash of the container\ncd /workspace/tunix\npython3 -m pip install git+https://github.com/google/qwix grain tensorboardx jaxtyping huggingface-hub==0.34.4\npython3 -m pip install --no-deps -e .  #otherwise this overrides the vllm tpulib 0.18\npython3 scripts/grpo_demo_llama3_qwen2.py --root-dir=root_dir --model-version=Qwen/Qwen2.5-0.5B-Instruct\n```\n\n\nError trace:\n```\nroot@v4-8-node-1:/workspace/tunix# python3 scripts/grpo_demo_llama3_qwen2.py --root-dir=root_dir --model-version=Qwen/Qwen2.5-0.5B-Instruct\n/workspace/tunix/scripts/grpo_demo_llama3_qwen2.py:275: SyntaxWarning: invalid escape sequence '\\$'\n  \nThis script is still WIP and you'll need to download all the data tolocal first. Functionality and performance is not guaranteed. Try at your own discretion\nDirectory does not exist: root_dir/rl/grpo/demo/experiments/llama3/training_runs/2\nINFO:absl: - Pathways not available. Using defaultHBM stats collector\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_0(process=0,(0,0,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_1(process=0,(1,0,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_2(process=0,(0,1,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_3(process=0,(1,1,0,0))\ntrain_dataset size: 1869, val_dataset size:0,test_dataset size: 50\n{'answer': array(['3', '34', '300', '35'], dtype='<U3'),\n 'prompts': array(['<|im_start|>system\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\n<|im_start|>user\\n<start_of_turn>user\\nYou are given a problem. Think about the problem and provide your reasoning. Place it between <reasoning> and </reasoning>. Then, provide the final answer (i.e., just one numerical value) between <answer> and </answer>.\\n\\nMaria has 4 dimes, 4 quarters, and 7 nickels in her piggy bank. Her mom gives her 5 quarters. How much money, in dollars, does Maria have now?<end_of_turn>\\n<start_of_turn>model<|im_end|>\\n<|im_start|>assistant\\n',\n       '<|im_start|>system\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\n<|im_start|>user\\n<start_of_turn>user\\nYou are given a problem. Think about the problem and provide your reasoning. Place it between <reasoning> and </reasoning>. Then, provide the final answer (i.e., just one numerical value) between <answer> and </answer>.\\n\\nA wildlife team is monitoring the number of birds in a park. There are 3 blackbirds in each of the park’s 7 trees. There are also 13 magpies roaming around the park. How many birds are in the park in total?<end_of_turn>\\n<start_of_turn>model<|im_end|>\\n<|im_start|>assistant\\n',\n       '<|im_start|>system\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\n<|im_start|>user\\n<start_of_turn>user\\nYou are given a problem. Think about the problem and provide your reasoning. Place it between <reasoning> and </reasoning>. Then, provide the final answer (i.e., just one numerical value) between <answer> and </answer>.\\n\\nLast year, the school library purchased 50 new books. This year, it purchased 3 times as many books. If the library had 100 books before it purchased new books last year, how many books are in the library now?<end_of_turn>\\n<start_of_turn>model<|im_end|>\\n<|im_start|>assistant\\n',\n       '<|im_start|>system\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\n<|im_start|>user\\n<start_of_turn>user\\nYou are given a problem. Think about the problem and provide your reasoning. Place it between <reasoning> and </reasoning>. Then, provide the final answer (i.e., just one numerical value) between <answer> and </answer>.\\n\\nJame gets 20 singing lessons.  He gets the first lesson free and after the first 10 paid lessons he only needs to pay for every other lesson.  Each lesson is $5.  His uncle pays for half.  How much does James pay?<end_of_turn>\\n<start_of_turn>model<|im_end|>\\n<|im_start|>assistant\\n'],\n      dtype='<U636'),\n 'question': array(['Maria has 4 dimes, 4 quarters, and 7 nickels in her piggy bank. Her mom gives her 5 quarters. How much money, in dollars, does Maria have now?',\n       'A wildlife team is monitoring the number of birds in a park. There are 3 blackbirds in each of the park’s 7 trees. There are also 13 magpies roaming around the park. How many birds are in the park in total?',\n       'Last year, the school library purchased 50 new books. This year, it purchased 3 times as many books. If the library had 100 books before it purchased new books last year, how many books are in the library now?',\n       'Jame gets 20 singing lessons.  He gets the first lesson free and after the first 10 paid lessons he only needs to pay for every other lesson.  Each lesson is $5.  His uncle pays for half.  How much does James pay?'],\n      dtype='<U213')}\n100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:01<00:00,  1.05s/it]\n100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 290/290 [00:00<00:00, 403.70it/s]\nINFO:absl:After creating the reference lora model - Pathways not available. Using defaultHBM stats collector\nINFO:absl:Using 475.3 MiB / 30.7 GiB (0.0150971112916562) on TPU_0(process=0,(0,0,0,0))\nINFO:absl:Using 474.6 MiB / 30.7 GiB (0.015072592546090434) on TPU_1(process=0,(1,0,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_2(process=0,(0,1,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_3(process=0,(1,1,0,0))\nINFO:absl:After creating a raw sampler - Pathways not available. Using defaultHBM stats collector\nINFO:absl:Using 475.3 MiB / 30.7 GiB (0.0150971112916562) on TPU_0(process=0,(0,0,0,0))\nINFO:absl:Using 474.6 MiB / 30.7 GiB (0.015072592546090434) on TPU_1(process=0,(1,0,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_2(process=0,(0,1,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_3(process=0,(1,1,0,0))\nINFO:absl:After creating a new rollout worker - Pathways not available. Using defaultHBM stats collector\nINFO:absl:Using 475.3 MiB / 30.7 GiB (0.0150971112916562) on TPU_0(process=0,(0,0,0,0))\nINFO:absl:Using 474.6 MiB / 30.7 GiB (0.015072592546090434) on TPU_1(process=0,(1,0,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_2(process=0,(0,1,0,0))\nINFO:absl:Using 13.0 KiB / 30.7 GiB (4.0321782714101377e-07) on TPU_3(process=0,(1,1,0,0))\nINFO 09-05 08:26:20 [__init__.py:241] Automatically detected platform tpu.\nINFO 09-05 08:26:21 [tpu.py:235] tpu_commons not found, using vLLM's TpuPlatform\nINFO 09-05 08:26:22 [utils.py:328] non-default args: {'max_model_len': 1536, 'tensor_parallel_size': 2, 'gpu_memory_utilization': 0.2, 'disable_log_stats': True, 'model': 'root_dir/rl/grpo/models/Qwen/Qwen2.5-0.5B-Instruct'}\nWARNING 09-05 08:26:22 [__init__.py:557] The global random seed is set to 0. Since VLLM_ENABLE_V1_MULTIPROCESSING is set to False, this may affect the random state of the Python process that launched vLLM.\nINFO 09-05 08:26:30 [__init__.py:748] Resolved architecture: Qwen2ForCausalLM\n`torch_dtype` is deprecated! Use `dtype` instead!\nINFO 09-05 08:26:30 [__init__.py:1786] Using max model len 1536\nINFO 09-05 08:26:30 [scheduler.py:222] Chunked prefill is enabled with max_num_batched_tokens=8192.\nINFO 09-05 08:26:30 [tpu.py:114] [TPU] Forcing DYNAMO_ONCE compilation level, and disabling cudagraph.\nWARNING:root:libtpu.so and TPU device found. Setting PJRT_DEVICE=TPU.\nINFO 09-05 08:26:33 [core.py:76] Initializing a V1 LLM engine (v0.10.2rc2.dev98+ge599e2c65) with config: model='root_dir/rl/grpo/models/Qwen/Qwen2.5-0.5B-Instruct', speculative_config=None, tokenizer='root_dir/rl/grpo/models/Qwen/Qwen2.5-0.5B-Instruct', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config={}, tokenizer_revision=None, trust_remote_code=False, dtype=torch.bfloat16, max_seq_len=1536, download_dir=None, load_format=auto, tensor_parallel_size=2, pipeline_parallel_size=1, disable_custom_all_reduce=True, quantization=None, enforce_eager=False, kv_cache_dtype=auto, device_config=None, decoding_config=DecodingConfig(backend='auto', disable_fallback=False, disable_any_whitespace=False, disable_additional_properties=False, reasoning_backend=''), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None), seed=0, served_model_name=root_dir/rl/grpo/models/Qwen/Qwen2.5-0.5B-Instruct, enable_prefix_caching=True, chunked_prefill_enabled=True, use_async_output_proc=False, pooler_config=None, compilation_config={\"level\":2,\"debug_dump_path\":\"\",\"cache_dir\":\"\",\"backend\":\"openxla\",\"custom_ops\":[],\"splitting_ops\":null,\"use_inductor\":true,\"compile_sizes\":null,\"inductor_compile_config\":{\"enable_auto_functionalized_v2\":false},\"inductor_passes\":{},\"cudagraph_mode\":0,\"use_cudagraph\":true,\"cudagraph_num_of_warmups\":0,\"cudagraph_capture_sizes\":null,\"cudagraph_copy_inputs\":false,\"full_cuda_graph\":false,\"pass_config\":{},\"max_capture_size\":null,\"local_cache_dir\":null}\nWARNING 09-05 08:26:33 [multiproc_worker_utils.py:273] Reducing Torch parallelism from 120 threads to 1 to avoid unnecessary CPU contention. Set OMP_NUM_THREADS in the external environment to tune this value as needed.\nINFO 09-05 08:26:33 [shm_broadcast.py:289] vLLM message queue communication handle: Handle(local_reader_ranks=[0, 1], buffer_handle=(2, 16777216, 10, 'psm_70330afd'), local_subscribe_addr='ipc:///tmp/5d75bd27-a3f4-4c9c-a96f-2c9e5f87df2c', remote_subscribe_addr=None, remote_addr_ipv6=False)\n/usr/local/lib/python3.12/multiprocessing/popen_fork.py:66: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.\n  self.pid = os.fork()\nINFO 09-05 08:26:33 [importing.py:43] Triton is installed but 0 active driver(s) found (expected 1). Disabling Triton to prevent runtime errors.\nINFO 09-05 08:26:33 [importing.py:63] Triton not installed or not compatible; certain GPU-related functions will not be available.\nINFO 09-05 08:26:33 [importing.py:43] Triton is installed but 0 active driver(s) found (expected 1). Disabling Triton to prevent runtime errors.\nINFO 09-05 08:26:33 [importing.py:63] Triton not installed or not compatible; certain GPU-related functions will not be available.\nINFO 09-05 08:26:33 [tpu_worker.py:35] tpu_commons not found, using vLLM's TPUWorker.\nWARNING 09-05 08:26:33 [tpu.py:170] Pin memory is not supported on TPU.\nINFO 09-05 08:26:33 [tpu_worker.py:35] tpu_commons not found, using vLLM's TPUWorker.\nWARNING 09-05 08:26:33 [tpu.py:170] Pin memory is not supported on TPU.\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [shm_broadcast.py:289] vLLM message queue communication handle: Handle(local_reader_ranks=[0], buffer_handle=(1, 10485760, 10, 'psm_fa746b34'), local_subscribe_addr='ipc:///tmp/3ad45fdd-7fd0-44dc-b556-feef89561d6b', remote_subscribe_addr=None, remote_addr_ipv6=False)\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [shm_broadcast.py:289] vLLM message queue communication handle: Handle(local_reader_ranks=[0], buffer_handle=(1, 10485760, 10, 'psm_55c15548'), local_subscribe_addr='ipc:///tmp/835e0f66-194b-4c37-bf74-5f6e5f54c8b7', remote_subscribe_addr=None, remote_addr_ipv6=False)\n[Gloo] Rank 0 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 1 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 1 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 0 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 1 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 0 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 0 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 1 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 1 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 0 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_communicator.py:23] tpu_commons not found, using vLLM's TpuCommunicator\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_communicator.py:66] TpuCommunicator initialized with MP\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_communicator.py:23] tpu_commons not found, using vLLM's TpuCommunicator\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_communicator.py:66] TpuCommunicator initialized with MP\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [shm_broadcast.py:289] vLLM message queue communication handle: Handle(local_reader_ranks=[1], buffer_handle=(1, 4194304, 6, 'psm_1d683d9d'), local_subscribe_addr='ipc:///tmp/d7d24686-58d5-4eb0-bd60-7a3547c2503e', remote_subscribe_addr=None, remote_addr_ipv6=False)\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 0 is connected to 0 peer ranks. Expected number of connected peer ranks is : 0\n[Gloo] Rank 1 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 0 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 1 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n[Gloo] Rank 0 is connected to 1 peer ranks. Expected number of connected peer ranks is : 1\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_communicator.py:66] TpuCommunicator initialized with MP\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_communicator.py:66] TpuCommunicator initialized with MP\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [parallel_state.py:1134] rank 0 in world size 2 is assigned as DP rank 0, PP rank 0, TP rank 0, EP rank 0\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [parallel_state.py:1134] rank 1 in world size 2 is assigned as DP rank 0, PP rank 0, TP rank 1, EP rank 1\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1861] Using exponential token paddings:\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1861] Using exponential token paddings:\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     16\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     16\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     32\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     32\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     64\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     64\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     128\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     128\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     256\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     256\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     512\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     1024\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     512\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     2048\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     1024\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     4096\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     2048\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     8192\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     4096\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1863]     8192\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1827] Preparing request paddings:\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1827] Preparing request paddings:\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     8\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     8\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     16\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     16\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     32\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     32\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     64\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     64\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     128\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     128\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     256\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1834]     256\n(VllmWorker TP0 pid=7644) INFO 09-05 08:26:33 [tpu_model_runner.py:1172] Loading model from scratch...\n(VllmWorker TP1 pid=7646) INFO 09-05 08:26:33 [tpu_model_runner.py:1172] Loading model from scratch...\nhttps://symbolize.stripped_domain/r/?trace=7f0a46ef863d,7f0b1c7ccddf,7f0a3e0968e7,7f0a3e0950ee,7f0a3e094b55,7f0a3e090c36,7f0a3aabab6d,7f0a3cd1b19d,7f0a3aa4ae32,7ee5c30bfae9,7ee5c30c012c,7ee5bc925f37,7ee5bc6260d0,7ee5bc630d47,7f0a55c364e3&map= \n*** SIGSEGV (@0x7f061515ec48), see go/stacktraces#s15 received by PID 7644 (TID 7644) on cpu 60; stack trace: ***\nhttps://symbolize.stripped_domain/r/?trace=7f0a46ef863d,7f0b1c7ccddf,7f0a3e0968e7,7f0a3e0950ee,7f0a3e094b55,7f0a3e090c36,7f0a3aabab6d,7f0a3cd1b19d,7f0a3aa4ae32,7ee5c30bfae9,7ee5c30c012c,7ee5bc925f37,7ee5bc6260d0,7ee5bc630d47,7f0a55c364e3&map= \n*** SIGSEGV (@0x7f061515ec48), see go/stacktraces#s15 received by PID 7646 (TID 7646) on cpu 61; stack trace: ***\nPC: @     0x7f0a46ef863d  (unknown)  (unknown)\nPC: @     0x7f0a46ef863d  (unknown)  (unknown)\n    @     0x7f0a46e6bfe5       1904  (unknown)\n    @     0x7f0a46e6bfe5       1904  (unknown)\n    @     0x7f0b1c7ccde0  2146701248  (unknown)\n    @     0x7f0b1c7ccde0  2146701248  (unknown)\n    @     0x7f0a3e0968e8         64  (unknown)\n    @     0x7f0a3e0968e8         64  (unknown)\n    @     0x7f0a3e0950ef        240  (unknown)\n    @     0x7f0a3e0950ef        240  (unknown)\n    @     0x7f0a3e094b56         64  (unknown)\n    @     0x7f0a3e094b56         64  (unknown)\n    @     0x7f0a3e090c37         64  (unknown)\n    @     0x7f0a3e090c37         64  (unknown)\n    @     0x7f0a3aabab6e       2256  (unknown)\n    @     0x7f0a3aabab6e       2256  (unknown)\n    @     0x7f0a3cd1b19e       1360  (unknown)\n    @     0x7f0a3cd1b19e       1360  (unknown)\n    @     0x7f0a3aa4ae33        944  (unknown)\n    @     0x7f0a3aa4ae33        944  (unknown)\n    @     0x7ee5c30bfaea       1104  xla::PjRtCApiClient::BufferFromHostBufferInternalImpl()\n    @     0x7ee5c30bfaea       1104  xla::PjRtCApiClient::BufferFromHostBufferInternalImpl()\n    @     0x7ee5c30c012d        224  xla::PjRtCApiClient::BufferFromHostBuffer()\n    @     0x7ee5c30c012d        224  xla::PjRtCApiClient::BufferFromHostBuffer()\n    @     0x7ee5bc925f38       1152  torch_xla::runtime::PjRtComputationClient::TransferToDevice()\n    @     0x7ee5bc925f38       1152  torch_xla::runtime::PjRtComputationClient::TransferToDevice()\n    @     0x7ee5bc6260d1        992  torch_xla::TensorToXlaData()\n    @     0x7ee5bc6260d1        992  torch_xla::TensorToXlaData()\n    @     0x7ee5bc630d48         32  torch_xla::XlaBackendImpl::MakeComputationDataFromTensor()\n    @     0x7ee5bc630d48         32  torch_xla::XlaBackendImpl::MakeComputationDataFromTensor()\n    @     0x7f0a55c364e4  (unknown)  torch::lazy::TensorToDataHandle()\n    @     0x7f0a55c364e4  (unknown)  torch::lazy::TensorToDataHandle()\n    @ ... and at least 3 more frames\n    @ ... and at least 3 more frames\nhttps://symbolize.stripped_domain/r/?trace=https://symbolize.stripped_domain/r/?trace=7f0a46ef863d,7f0a46ef863d,7f0a46e6bfe4,7f0a46e6bfe4,7f0b1c7ccddf,7f0b1c7ccddf,7f0a3e0968e7,7f0a3e0968e7,7f0a3e0950ee,7f0a3e0950ee,7f0a3e094b55,7f0a3e094b55,7f0a3e090c36,7f0a3e090c36,7f0a3aabab6d,7f0a3aabab6d,7f0a3cd1b19d,7f0a3cd1b19d,7f0a3aa4ae32,7f0a3aa4ae32,7ee5c30bfae9,7ee5c30bfae9,7ee5c30c012c,7ee5c30c012c,7ee5bc925f37,7ee5bc925f37,7ee5bc6260d0,7ee5bc6260d0,7ee5bc630d47,7ee5bc630d47,7f0a55c364e37f0a55c364e3&map=&map= \n \nE0905 08:26:33.933235    7644 coredump_hook.cc:301] RAW: Remote crash data gathering hook invoked.\nE0905 08:26:33.933235    7646 coredump_hook.cc:301] RAW: Remote crash data gathering hook invoked.\nE0905 08:26:33.933260    7646 client.cc:270] RAW: Coroner client retries enabled, will retry for up to 30 sec.\nE0905 08:26:33.933260    7644 client.cc:270] RAW: Coroner client retries enabled, will retry for up to 30 sec.\nE0905 08:26:33.933280    7646 coredump_hook.cc:396] RAW: Sending fingerprint to remote end.\nE0905 08:26:33.933281    7644 coredump_hook.cc:396] RAW: Sending fingerprint to remote end.\nE0905 08:26:33.933304    7644 coredump_hook.cc:405] RAW: Cannot send fingerprint to Coroner: [NOT_FOUND] stat failed on crash reporting socket /var/google/services/logmanagerd/remote_coredump.socket (Is the listener running?): No such file or directory\nE0905 08:26:33.933304    7646 coredump_hook.cc:405] RAW: Cannot send fingerprint to Coroner: [NOT_FOUND] stat failed on crash reporting socket /var/google/services/logmanagerd/remote_coredump.socket (Is the listener running?): No such file or directory\nE0905 08:26:33.933312    7644 coredump_hook.cc:457] RAW: Dumping core locally.\nE0905 08:26:33.933314    7646 coredump_hook.cc:457] RAW: Dumping core locally.\nhttps://symbolize.stripped_domain/r/?trace=7f0b1c781f17,7f0b1c7ccddf,7f0a46d4bb0d,7f0a46d4bc82,7f0a46d45794,7f0a46d4676a,7f0a46d45a04,7f0a46d46498,7f0a46e6c37c,7f0b1c7ccddf,7f0a3e0968e7,7f0a3e0950ee,7f0a3e094b55,7f0a3e090c36,7f0a3aabab6d,7f0a3cd1b19d,7f0a3aa4ae32,7ee5c30bfae9,7ee5c30c012c,7ee5bc925f37,7ee5bc6260d0,7ee5bc630d47,7f0a55c364e3&map= \nE0905 08:27:35.109189    7646 process_state.cc:1175] RAW: Signal 11 raised at PC: 0x7f0b1c781f17 while already in FailureSignalHandler!\nE0905 08:27:35.109196    7646 process_state.cc:1210] RAW: Raising 11 signal with default behavior\nhttps://symbolize.stripped_domain/r/?trace=7f0b1c781f17,7f0b1c7ccddf,7f0a46d4bb0d,7f0a46d4bc82,7f0a46d45794,7f0a46d4676a,7f0a46d45a04,7f0a46d46498,7f0a46e6c37c,7f0b1c7ccddf,7f0a3e0968e7,7f0a3e0950ee,7f0a3e094b55,7f0a3e090c36,7f0a3aabab6d,7f0a3cd1b19d,7f0a3aa4ae32,7ee5c30bfae9,7ee5c30c012c,7ee5bc925f37,7ee5bc6260d0,7ee5bc630d47,7f0a55c364e3&map= \nE0905 08:27:35.112495    7644 process_state.cc:1175] RAW: Signal 11 raised at PC: 0x7f0b1c781f17 while already in FailureSignalHandler!\nE0905 08:27:35.112502    7644 process_state.cc:1210] RAW: Raising 11 signal with default behavior\nTraceback (most recent call last):\n  File \"/workspace/tunix/scripts/grpo_demo_llama3_qwen2.py\", line 825, in <module>\n    rl_cluster = rl_cluster_lib.RLCluster(\n                 ^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/tunix/tunix/rl/rl_cluster.py\", line 166, in __init__\n    self._init_cluster()\n  File \"/workspace/tunix/tunix/rl/rl_cluster.py\", line 289, in _init_cluster\n    self._rollout = vllm_rollout.VllmRollout(\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/tunix/tunix/rl/rollout/vllm_rollout.py\", line 41, in __init__\n    self._sampler = vllm_sampler.VllmSampler(\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/tunix/tunix/generate/vllm_sampler.py\", line 94, in __init__\n    self.llm = LLM(**self.args)\n               ^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/entrypoints/llm.py\", line 272, in __init__\n    self.llm_engine = LLMEngine.from_engine_args(\n                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/engine/llm_engine.py\", line 492, in from_engine_args\n    return engine_cls.from_vllm_config(\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/v1/engine/llm_engine.py\", line 127, in from_vllm_config\n    return cls(vllm_config=vllm_config,\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/v1/engine/llm_engine.py\", line 104, in __init__\n    self.engine_core = EngineCoreClient.make_client(\n                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/v1/engine/core_client.py\", line 82, in make_client\n    return InprocClient(vllm_config, executor_class, log_stats)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/v1/engine/core_client.py\", line 245, in __init__\n    self.engine_core = EngineCore(*args, **kwargs)\n                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/v1/engine/core.py\", line 82, in __init__\n    self.model_executor = executor_class(vllm_config)\n                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/executor/executor_base.py\", line 54, in __init__\n    self._init_executor()\n  File \"/workspace/vllm/vllm/v1/executor/multiproc_executor.py\", line 96, in _init_executor\n    self.workers = WorkerProc.wait_for_ready(unready_workers)\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/workspace/vllm/vllm/v1/executor/multiproc_executor.py\", line 487, in wait_for_ready\n    raise e from None\nException: WorkerProc initialization failed due to an exception in a background process. See stack trace for root cause.\n/usr/local/lib/python3.12/multiprocessing/resource_tracker.py:279: UserWarning: resource_tracker: There appear to be 3 leaked shared_memory objects to clean up at shutdown\n  warnings.warn('resource_tracker: There appear to be %d '\nroot@v4-8-node-1:/workspace/tunix# \n```",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/256/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/137",
      "id": 3266528148,
      "node_id": "I_kwDOOTDVN87Cs0OU",
      "number": 137,
      "title": "Wandb",
      "user": {
        "login": "shivajid",
        "id": 7957968,
        "node_id": "MDQ6VXNlcjc5NTc5Njg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/7957968?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/shivajid",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "tianshub",
        "id": 4454178,
        "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/tianshub",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-07-27T04:04:43Z",
      "updated_at": "2025-11-06T17:32:33Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "## Expected Behavior\nClean execution\n\n## Actual Behavior\nAdding the metrics logger throws wandb errors.\n\nwandb: WARNING Tried to log to step 0 that is less than the current step 3. Steps must be monotonically increasing, so this data will be ignored. See https://wandb.me/define-metric to log data out of order.\n\nLater has some some unexpected behavior\n\n```\n  File \"/home/shivajid/workshop/tensor_crunch/sample_trainer.py\", line 223, in <module>\n    out_data = sampler(\n               ^^^^^^^^\n  File \"/home/shivajid/tunixenv/lib/python3.11/site-packages/tunix/generate/sampler.py\", line 705, in __call__\n    sampling_state = self._compiled_prefill_fn(\n                     ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/shivajid/tunixenv/lib/python3.11/site-packages/jax/_src/monitoring.py\", line 97, in record_scalar\n    callback(event, value, **kwargs)\n  File \"/home/shivajid/tunixenv/lib/python3.11/site-packages/tunix/sft/metrics_logger.py\", line 90, in log_to_wandb\n    wandb.log({event: scalar_value}, step=current_step)\n  File \"/home/shivajid/tunixenv/lib/python3.11/site-packages/wandb/sdk/lib/preinit.py\", line 36, in preinit_wrapper\n    raise wandb.Error(f\"You must call wandb.init() before {name}()\")\nwandb.errors.errors.Error: You must call wandb.init() before wandb.log()\n```\n\n\n## Steps to Reproduce the Problem\n\n1. Add wandb to your import and login\n1.\n1.\n\n## Specifications\n\n- Version:\n- Platform: TPUv6e-8\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/137/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/94",
      "id": 3205477204,
      "node_id": "I_kwDOOTDVN86_D7NU",
      "number": 94,
      "title": "Qwen Example relies on HF Transformer and Accelerate, which is removed",
      "user": {
        "login": "shivajid",
        "id": 7957968,
        "node_id": "MDQ6VXNlcjc5NTc5Njg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/7957968?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/shivajid",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 9357816432,
          "node_id": "LA_kwDOOTDVN88AAAACLcTycA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:build/install",
          "name": "type:build/install",
          "color": "ededed",
          "default": false,
          "description": "Issue related to build/install"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "tianshub",
        "id": 4454178,
        "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/tianshub",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-07-05T19:33:53Z",
      "updated_at": "2025-11-06T17:32:53Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I am trying to run the Tunix Qwen Example on TPUv6e, it is asking me to install PyTorch XLA. Is there. pure Jax way of doing this?",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/94/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/93",
      "id": 3202053996,
      "node_id": "I_kwDOOTDVN86-23ds",
      "number": 93,
      "title": "Adding linting configuration file",
      "user": {
        "login": "Practicinginhell",
        "id": 147235329,
        "node_id": "U_kgDOCMaiAQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/147235329?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Practicinginhell",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274161,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1cQ",
          "url": "https://api.github.com/repos/google/tunix/labels/type:feature/enhancement",
          "name": "type:feature/enhancement",
          "color": "a2eeef",
          "default": false,
          "description": "New feature or request"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "Limeload",
        "id": 80426069,
        "node_id": "MDQ6VXNlcjgwNDI2MDY5",
        "avatar_url": "https://avatars.githubusercontent.com/u/80426069?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Limeload",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "Limeload",
          "id": 80426069,
          "node_id": "MDQ6VXNlcjgwNDI2MDY5",
          "avatar_url": "https://avatars.githubusercontent.com/u/80426069?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Limeload",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-07-04T09:56:24Z",
      "updated_at": "2025-11-06T17:33:23Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Firstly, thank you for the amazing repo. Could you provide a linting configuration file for tools like Pylint or Flake8. ",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/93/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/issues/45",
      "id": 3093673887,
      "node_id": "I_kwDOOTDVN864Zbef",
      "number": 45,
      "title": "Qwen example notebook",
      "user": {
        "login": "peregilk",
        "id": 9079808,
        "node_id": "MDQ6VXNlcjkwNzk4MDg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/9079808?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/peregilk",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {
        "0": {
          "id": 8394274168,
          "node_id": "LA_kwDOOTDVN88AAAAB9FZ1eA",
          "url": "https://api.github.com/repos/google/tunix/labels/type:support",
          "name": "type:support",
          "color": "d876e3",
          "default": false,
          "description": "Further information is requested"
        }
      },
      "state": "open",
      "locked": false,
      "assignee": {
        "login": "selamw1",
        "id": 153962326,
        "node_id": "U_kgDOCS1HVg",
        "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/selamw1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "selamw1",
          "id": 153962326,
          "node_id": "U_kgDOCS1HVg",
          "avatar_url": "https://avatars.githubusercontent.com/u/153962326?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/selamw1",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "milestone": null,
      "comments": 1,
      "created_at": "2025-05-27T11:58:24Z",
      "updated_at": "2025-11-06T17:33:48Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I am trying out your Qwen example notebook. It links to Kaggle but as far I can see, there are no JAX/Flax checkpoints there. How do I convert/find these?",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/google/tunix/issues/45/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "pinned_comment": null,
      "linked_prs": []
    }
  ],
  "pulls": [
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1105",
      "id": 3294496148,
      "node_id": "PR_kwDOOTDVN87EXgWU",
      "number": 1105,
      "state": "open",
      "locked": false,
      "title": "Added a GPU demo for PEFT with QLoRA on Llama 3_1",
      "user": {
        "login": "katjasrz",
        "id": 47559975,
        "node_id": "MDQ6VXNlcjQ3NTU5OTc1",
        "avatar_url": "https://avatars.githubusercontent.com/u/47559975?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/katjasrz",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #N/A (example notebook addition; no prior issue)\r\n\r\n**Summary**\r\n\r\nAdd `examples/qlora_llama3_gpu.ipynb`: a GPU-focused tutorial for parameter-efficient fine-tuning (LoRA/QLoRA) of Llama 3.1-8B using JAX + Tunix + Qwix on NVIDIA GPUs.\r\n\r\n**Why**\r\n\r\nTunix already includes QLoRA examples (e.g., Gemma), but a Llama 3.1 GPU end-to-end notebook is useful for users training on NVIDIA hardware.\r\n\r\n**What’s included**\r\n\r\nGPU preflight (nvidia-smi), HF token UI + authentication, gated-model access instructions, device mesh setup (1 GPU → no sharding; multi-GPU → FSDP/TP), model load via AutoModel, and a small training run (e.g., 100 steps) with TensorBoard + sanity-check inference.\r\n\r\nNotebook is an example and is not intended to be executed in CI.\r\n\r\n**Reference**\r\n\r\n- LoRA paper: Hu et al., 2021 (“LoRA: Low-Rank Adaptation…”)\r\n- QLoRA paper: Dettmers et al., 2023 (“QLoRA…”)\r\n- Existing QLoRA example notebook: `examples/qlora_gemma.ipynb` (in upstream google/tunix)\r\n- Llama 3.1 model card [https://huggingface.co/meta-llama/Llama-3.1-8B](https://huggingface.co/meta-llama/Llama-3.1-8B)\r\n\r\n**Colab Notebook**\r\n\r\n[https://colab.research.google.com/github/katjasrz/tunix/blob/main/examples/qlora_llama3_gpu.ipynb](https://colab.research.google.com/github/katjasrz/tunix/blob/main/examples/qlora_llama3_gpu.ipynb)\r\n\r\n**Reproducing**\r\n\r\nExecuted the notebook in the NGC container `nvcr.io/nvidia/jax:26.01-maxtext-py3` on a cluster node with 8 H100 NVIDIA GPUs as well as on a single DGX Spark, CUDA 13.1, driver 580.105.08, JAX 0.8.1.dev20260217.\r\n\r\nVerified:\r\n\r\n- PEFT runs for 100 steps with LoRA and QLoRA and writes checkpoints/logs.\r\n- TensorBoard logs are created.\r\n- Inference sanity check runs and produces output.\r\n\r\nTo reproduce, execute as follows:\r\n\r\n```bash\r\ncd <YOUR_ROOT_DIRECTORY>\r\n\r\n# clone this repo\r\ngit clone https://github.com/katjasrz/tunix.git\r\n\r\nexport ROOT_DIR=$(pwd)\r\nexport PROJECT_DIR=$ROOT_DIR/tunix/examples\r\nexport HF_CACHE_DIR=$ROOT_DIR/huggingface\r\n\r\ndocker run -it --rm --ipc=host \\\r\n  --gpus=all \\\r\n  -p 8889:8889 \\\r\n  -p 6006:6006 \\\r\n  --shm-size=16g \\\r\n  --ulimit memlock=-1 \\\r\n  -v \"$PROJECT_DIR\":/workspace \\\r\n  -v \"$HF_CACHE_DIR\":/hf_cache \\\r\n  -e HF_HOME=/hf_cache \\\r\n  -e LOCAL_UID=$(id -u) \\\r\n  -e LOCAL_GID=$(id -g) \\\r\n  nvcr.io/nvidia/jax:26.01-maxtext-py3 \\\r\n  bash -lc 'set -e\r\n    groupadd -g $LOCAL_GID hostgrp 2>/dev/null || true\r\n    useradd -u $LOCAL_UID -g $LOCAL_GID -M -d /workspace hostusr 2>/dev/null || true\r\n    \r\n    python3 -m pip install --upgrade pip\r\n    pip install jupyterlab ipywidgets\r\n    pip install -U git+https://github.com/google/tunix\r\n    \r\n    su hostusr -c \"cd /workspace && HOME=/workspace HF_HOME=/hf_cache \\\r\n      jupyter lab --ip=0.0.0.0 --port=8889 --no-browser\"'\r\n```\r\n\r\nThen follow the instructions in the jupyter notebook /examples/qlora_llama3_gpu.ipynb\r\n\r\n**Checklist**\r\n\r\n- [ x] I have added all the necessary unit tests for my change.\r\n- [x ] I have verified that my change does not break existing code and all unit tests pass.\r\n- [ x] I have added all appropriate doc-strings/documentation.\r\n- [ x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [ x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x ] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/docs/contributing.md).\r\n",
      "created_at": "2026-02-17T14:02:01Z",
      "updated_at": "2026-02-17T14:03:56Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "9f698a4471001c49b257b138ceebc6e3497fce1a",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "katjasrz:main",
        "ref": "main",
        "sha": "50b81a61f928a82f8e4c86975fb472f3a6bbb938",
        "user": {
          "login": "katjasrz",
          "id": 47559975,
          "node_id": "MDQ6VXNlcjQ3NTU5OTc1",
          "avatar_url": "https://avatars.githubusercontent.com/u/47559975?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/katjasrz",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1159961062,
          "node_id": "R_kgDORSOZ5g",
          "name": "tunix",
          "full_name": "katjasrz/tunix",
          "private": false,
          "owner": {
            "login": "katjasrz",
            "id": 47559975,
            "node_id": "MDQ6VXNlcjQ3NTU5OTc1",
            "avatar_url": "https://avatars.githubusercontent.com/u/47559975?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/katjasrz",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/katjasrz/tunix",
          "created_at": "2026-02-17T11:27:03Z",
          "updated_at": "2026-02-17T11:47:10Z",
          "pushed_at": "2026-02-17T11:47:05Z",
          "homepage": "",
          "size": 33009,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "7c73390974bcac08031bfa5a5aacc1f50c70d52e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1105"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1105"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1105"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1105/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1105/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1105/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/50b81a61f928a82f8e4c86975fb472f3a6bbb938"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1104",
      "id": 3293829661,
      "node_id": "PR_kwDOOTDVN87EU9od",
      "number": 1104,
      "state": "open",
      "locked": false,
      "title": "Add VLM SFT example",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add VLM SFT example\n\nThis PR adds a script for training Gemma 3 on an OCR dataset.\n",
      "created_at": "2026-02-17T10:58:32Z",
      "updated_at": "2026-02-17T10:58:33Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "47876aa16fe8211e49886c53c89d29d35157bc6c",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_871216291",
        "ref": "test_871216291",
        "sha": "ca69c1ccb50a6a3871124cfbd7ce86f7bc8f2f32",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "7c73390974bcac08031bfa5a5aacc1f50c70d52e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1104"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1104"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1104"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1104/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1104/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1104/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/ca69c1ccb50a6a3871124cfbd7ce86f7bc8f2f32"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1103",
      "id": 3290560190,
      "node_id": "PR_kwDOOTDVN87EIfa-",
      "number": 1103,
      "state": "open",
      "locked": false,
      "title": "Allow sampler to take in images",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Allow sampler to take in images\n\nIn order to allow the text sampler to take in images, we only need to take care of the pre-fill phase, because the sampler will be text, image-in, text-out.\n\nWe do two things:\n- Call the image processor inside the sampler __call__ method so as to process the images.\n- We add a method to the Gemma 3 model class - `get_positions_and_attention_mask`. If the model has this class, it will be used inside the sampler during the pre-fill phase. It is necessary for vision models to have this class if any custom token processing is needed.\n",
      "created_at": "2026-02-16T15:47:48Z",
      "updated_at": "2026-02-17T08:30:04Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "11dd37b6925c384e07b32bf361dba04ad860ba2b",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_870890814",
        "ref": "test_870890814",
        "sha": "84f8f4ef1a9064d285708bae5bf72f3a17f59d37",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "7c73390974bcac08031bfa5a5aacc1f50c70d52e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1103"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1103"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1103"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1103/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1103/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1103/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/84f8f4ef1a9064d285708bae5bf72f3a17f59d37"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1101",
      "id": 3286719722,
      "node_id": "PR_kwDOOTDVN87D51zq",
      "number": 1101,
      "state": "open",
      "locked": false,
      "title": "Internal test",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Internal test\n",
      "created_at": "2026-02-15T11:40:31Z",
      "updated_at": "2026-02-15T12:01:22Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "43d967ae6079792cd0d3cd40c39aebf9a4723b98",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_862901749",
        "ref": "test_862901749",
        "sha": "6cb0055b2d79ba0c6fc655f7c7eae3e589939917",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "7c73390974bcac08031bfa5a5aacc1f50c70d52e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1101"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1101"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1101"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1101/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1101/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1101/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/6cb0055b2d79ba0c6fc655f7c7eae3e589939917"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1100",
      "id": 3285295133,
      "node_id": "PR_kwDOOTDVN87D0aAd",
      "number": 1100,
      "state": "open",
      "locked": false,
      "title": "fix loss mask for agentic learner",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "fix loss mask for agentic learner\n",
      "created_at": "2026-02-14T20:15:12Z",
      "updated_at": "2026-02-16T21:06:01Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "5bf4e34ad2f8b5ed15c614d890cfa9909312e599",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_869918841",
        "ref": "test_869918841",
        "sha": "0c168905c079bda417d2a4d11faab89df1ea0f40",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "7c73390974bcac08031bfa5a5aacc1f50c70d52e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1100"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1100"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1100"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1100/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1100/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1100/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/0c168905c079bda417d2a4d11faab89df1ea0f40"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1099",
      "id": 3283134248,
      "node_id": "PR_kwDOOTDVN87DsKco",
      "number": 1099,
      "state": "open",
      "locked": false,
      "title": "expert parallelism config in base rollout",
      "user": {
        "login": "khatwanimohit",
        "id": 118776932,
        "node_id": "U_kgDOBxRkZA",
        "avatar_url": "https://avatars.githubusercontent.com/u/118776932?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/khatwanimohit",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "- Add expert parallelism support for vLLM rollout: Introduces expert_parallel_size and enable_expert_parallelism configuration options across VllmConfig, RolloutConfig, and VllmRollout, enabling      \r\n  expert-parallel sharding for Mixture-of-Experts (MoE) models.                                                                                                                                           \r\n- Update device partitioning logic to account for expert parallelism: Tensor parallel and data parallel size calculations now divide by expert_parallel_size, ensuring correct device allocation when\r\n  expert parallelism is enabled.\r\n- Pass expert parallelism config into vLLM sharding strategy: When enable_expert_parallelism is set, the expert_parallelism size is included in the sharding strategy passed to vLLM's\r\n  additional_config.\r\n- Add stop strings support for vLLM sampling: Introduces stop_strings config option (rollout_vllm_stop_strings) that allows specifying custom stop strings for generation, with automatic detokenization\r\n   enabled when stop strings are set\r\n   \r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/docs/contributing.md).\r\n",
      "created_at": "2026-02-13T23:21:27Z",
      "updated_at": "2026-02-13T23:30:33Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "8d0725521cd3593786d35d4a74420556416f8040",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:mohit/dev",
        "ref": "mohit/dev",
        "sha": "4b6f3b4c3398f7a003e05978dbc37875c96b06ac",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "2c5f81b4e04d7be12e1871bf0c4463e6ea7211e0",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1099"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1099"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1099"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1099/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1099/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1099/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/4b6f3b4c3398f7a003e05978dbc37875c96b06ac"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1098",
      "id": 3282901009,
      "node_id": "PR_kwDOOTDVN87DrRgR",
      "number": 1098,
      "state": "open",
      "locked": false,
      "title": "Add memory optimization options to state transfer.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add memory optimization options to state transfer.\n",
      "created_at": "2026-02-13T21:58:49Z",
      "updated_at": "2026-02-13T22:03:44Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "7352198039f0b89bd3f5e51ece5ed718bfc707b6",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_869876782",
        "ref": "test_869876782",
        "sha": "ef264d22e263aa9927bc5e23e72dba572d2a0088",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "256751488a7692cb7566dce1a80c51eef09b4bdd",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1098"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1098"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1098"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1098/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1098/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1098/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/ef264d22e263aa9927bc5e23e72dba572d2a0088"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1097",
      "id": 3282747071,
      "node_id": "PR_kwDOOTDVN87Dqr6_",
      "number": 1097,
      "state": "open",
      "locked": false,
      "title": "Adding dtype casting for direct state transfer.",
      "user": {
        "login": "NicoGrande",
        "id": 30909254,
        "node_id": "MDQ6VXNlcjMwOTA5MjU0",
        "avatar_url": "https://avatars.githubusercontent.com/u/30909254?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/NicoGrande",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR adds support for dtype casting in the `direct_state_transfer` method if we have different dtypes for identical keys in source and target pytrees. This is useful for the case where we want to train a model with a certain dtype precision and then serve the same model with lower precision. \r\n\r\n**Checklist**\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/docs/contributing.md).\r\n",
      "created_at": "2026-02-13T21:18:52Z",
      "updated_at": "2026-02-13T21:37:52Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:nicogrande/add-dtype-cast",
        "ref": "nicogrande/add-dtype-cast",
        "sha": "27823a36a094952e167d6b533b9b2bc957f799ca",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "2fa731e332c791dda7104364d0541dbaa173847b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1097"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1097"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1097"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1097/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1097/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1097/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/27823a36a094952e167d6b533b9b2bc957f799ca"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1096",
      "id": 3282694397,
      "node_id": "PR_kwDOOTDVN87DqfD9",
      "number": 1096,
      "state": "open",
      "locked": false,
      "title": "create clear boundaries for global step, mini batch and micro batch",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "create clear boundaries for global step, mini batch and micro batch\n",
      "created_at": "2026-02-13T21:06:16Z",
      "updated_at": "2026-02-13T21:06:18Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "00a5268afa80f57443255c4e7d37f6b8be009143",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_869849068",
        "ref": "test_869849068",
        "sha": "1a2fbe21cef3d047e6e97138f25fb7654401df0e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "2fa731e332c791dda7104364d0541dbaa173847b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1096"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1096"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1096"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1096/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1096/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1096/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/1a2fbe21cef3d047e6e97138f25fb7654401df0e"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1094",
      "id": 3282174685,
      "node_id": "PR_kwDOOTDVN87DogLd",
      "number": 1094,
      "state": "open",
      "locked": false,
      "title": "read micro_batch from the cluster config instead of hardcoding in agentic_rl_learner",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "read micro_batch from the cluster config instead of hardcoding in agentic_rl_learner\n",
      "created_at": "2026-02-13T19:00:02Z",
      "updated_at": "2026-02-13T20:09:59Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "6bb3e9b9f0e41d9f19966262532f564c7e42710a",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_869803510",
        "ref": "test_869803510",
        "sha": "2bdcb051d855e06232545393cb3e8d2f3cf98149",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "2fa731e332c791dda7104364d0541dbaa173847b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1094"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1094"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1094"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1094/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1094/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1094/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/2bdcb051d855e06232545393cb3e8d2f3cf98149"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1089",
      "id": 3279673085,
      "node_id": "PR_kwDOOTDVN87De9b9",
      "number": 1089,
      "state": "open",
      "locked": false,
      "title": "Fix auto-assignment of github issues and pull requests to the eng.",
      "user": {
        "login": "rajasekharporeddy",
        "id": 153593711,
        "node_id": "U_kgDOCSenbw",
        "avatar_url": "https://avatars.githubusercontent.com/u/153593711?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/rajasekharporeddy",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "The auto-assigment is currently not working. I have included a new script to fix the auto-assignment of issues and pull requests.\r\n\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/docs/contributing.md).\r\n",
      "created_at": "2026-02-13T07:22:12Z",
      "updated_at": "2026-02-13T07:22:16Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "f02d0b9b9386c69e6003a92f61d8b4440162d624",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "rajasekharporeddy:auto_assign",
        "ref": "auto_assign",
        "sha": "50fcbc04c942cb7d96254a69ee85f734418c8d1f",
        "user": {
          "login": "rajasekharporeddy",
          "id": 153593711,
          "node_id": "U_kgDOCSenbw",
          "avatar_url": "https://avatars.githubusercontent.com/u/153593711?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/rajasekharporeddy",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1095460342,
          "node_id": "R_kgDOQUtl9g",
          "name": "tunix",
          "full_name": "rajasekharporeddy/tunix",
          "private": false,
          "owner": {
            "login": "rajasekharporeddy",
            "id": 153593711,
            "node_id": "U_kgDOCSenbw",
            "avatar_url": "https://avatars.githubusercontent.com/u/153593711?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/rajasekharporeddy",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/rajasekharporeddy/tunix",
          "created_at": "2025-11-13T04:40:39Z",
          "updated_at": "2026-02-13T07:10:58Z",
          "pushed_at": "2026-02-13T07:17:02Z",
          "homepage": "",
          "size": 32978,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "30e37dcdef7da0df4be2fb275365059794786605",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1089"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1089"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1089"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1089/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1089/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1089/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/50fcbc04c942cb7d96254a69ee85f734418c8d1f"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1087",
      "id": 3278503969,
      "node_id": "PR_kwDOOTDVN87DagAh",
      "number": 1087,
      "state": "open",
      "locked": false,
      "title": "Expose `enable_thinking` in `RLCluster.generate`.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Expose `enable_thinking` in `RLCluster.generate`.\n",
      "created_at": "2026-02-12T22:46:12Z",
      "updated_at": "2026-02-12T22:46:13Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "297d88acba3e841dec275463921ce2d08f24b2c2",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_869391979",
        "ref": "test_869391979",
        "sha": "899237f65939d73dc8704677aca834eb6e4ada27",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "0a98e91b5ea91e6aee1156f62fe4b1a2ee0a938d",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1087"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1087"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1087"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1087/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1087/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1087/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/899237f65939d73dc8704677aca834eb6e4ada27"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1085",
      "id": 3278344740,
      "node_id": "PR_kwDOOTDVN87DZ5Ik",
      "number": 1085,
      "state": "open",
      "locked": false,
      "title": "make trace writing a configurable option",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "make trace writing a configurable option\n",
      "created_at": "2026-02-12T21:52:58Z",
      "updated_at": "2026-02-12T23:46:23Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "a0ffd8a3c3f8566ddb770e370a839637fb797033",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_869369502",
        "ref": "test_869369502",
        "sha": "2183f4e414eb06746210c16376bc489e72d4b1bb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "035373c96661228aa530a3a31f44ae1b2fca9d3a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1085"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1085"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1085"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1085/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1085/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1085/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/2183f4e414eb06746210c16376bc489e72d4b1bb"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1080",
      "id": 3274025682,
      "node_id": "PR_kwDOOTDVN87DJarS",
      "number": 1080,
      "state": "open",
      "locked": false,
      "title": "bound qwix version",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "bound qwix version\n",
      "created_at": "2026-02-12T00:33:38Z",
      "updated_at": "2026-02-12T23:19:37Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "78e3ecb7ab9a495dd5bb13140ac7bc06627d22ba",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_868895770",
        "ref": "test_868895770",
        "sha": "3493d6dbd8edc92288218aed5907d653047070f1",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f739ee6d42dbc1d2378a121773ef585985c11f1a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1080"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1080"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1080"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1080/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1080/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1080/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/3493d6dbd8edc92288218aed5907d653047070f1"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1073",
      "id": 3269369233,
      "node_id": "PR_kwDOOTDVN87C3p2R",
      "number": 1073,
      "state": "open",
      "locked": false,
      "title": "adding perf metrics to agentic loop",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "adding perf metrics to agentic loop\n",
      "created_at": "2026-02-10T23:01:37Z",
      "updated_at": "2026-02-10T23:01:39Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "f3bdaa2d6f8923af468682b230d25cc2c9a5a883",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_868334490",
        "ref": "test_868334490",
        "sha": "2578ae36961b88f9cb6ed5bd5e847bf1f096e544",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "d7f4e8ad5df3e2e8cc764df1bab558649fb81f88",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1073"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1073"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1073"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1073/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1073/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1073/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/2578ae36961b88f9cb6ed5bd5e847bf1f096e544"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1072",
      "id": 3269343857,
      "node_id": "PR_kwDOOTDVN87C3jpx",
      "number": 1072,
      "state": "open",
      "locked": false,
      "title": "Fix sglang issue to unblock tunix submit",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fix sglang issue to unblock tunix submit\n",
      "created_at": "2026-02-10T22:50:36Z",
      "updated_at": "2026-02-11T08:15:26Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "103c883409d868b59deb7301853c8b40b51f2737",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_868328889",
        "ref": "test_868328889",
        "sha": "2c2fc8949e83cdc4ec628fbea9208581ebd7a89d",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "1512da764c933519f75b7fd8871e0533dfe02158",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1072"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1072"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1072"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1072/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1072/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1072/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/2c2fc8949e83cdc4ec628fbea9208581ebd7a89d"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1064",
      "id": 3259642297,
      "node_id": "PR_kwDOOTDVN87CSjG5",
      "number": 1064,
      "state": "open",
      "locked": false,
      "title": "Add image processor",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add image processor\n\nThis PR adds a basic image processor, which takes in a batch of images and processes them (resizing, normalising, etc.).\n",
      "created_at": "2026-02-08T11:36:24Z",
      "updated_at": "2026-02-17T07:31:16Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "26fe8db94612f7837a6a023c4be38bc0f303a73b",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_867024240",
        "ref": "test_867024240",
        "sha": "a938adc1aceeffea74cff134de5f682f4a451be1",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "7c73390974bcac08031bfa5a5aacc1f50c70d52e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1064"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1064"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1064"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1064/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1064/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1064/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/a938adc1aceeffea74cff134de5f682f4a451be1"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1055",
      "id": 3252957532,
      "node_id": "PR_kwDOOTDVN87B5DFc",
      "number": 1055,
      "state": "open",
      "locked": false,
      "title": "Add Agent Sandbox integration example",
      "user": {
        "login": "igooch",
        "id": 13687489,
        "node_id": "MDQ6VXNlcjEzNjg3NDg5",
        "avatar_url": "https://avatars.githubusercontent.com/u/13687489?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/igooch",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR introduces the infrastructure setup and examples required to run agent-sandbox for R2E-Gym rl training.\r\n\r\n- New Example Notebook: Added examples/deepswe/agent_sandbox_test.ipynb which demonstrates:\r\n  - Setting up a GKE cluster with gVisor-enabled node pools.\r\n  - Installing the agent-sandbox controller and client.\r\n  - Interacting with the sandbox using R2E-Gym and a mock LLM loop.\r\n- Documentation: Updated examples/README.rst with instructions for creating and configuring a v5litepod-8 TPU VM in GCE.\r\n- Dependencies:\r\n  - Pinned Python version to 3.12.9 in .python-version.\r\n  - Updated uv.lock to reflect new dependencies required for the sandbox environment.\r\n  - Updated .gitignore to exclude virtual environment directories (.venv).",
      "created_at": "2026-02-06T03:48:22Z",
      "updated_at": "2026-02-11T17:39:40Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": true,
      "head": {
        "label": "igooch:agentic-sandbox",
        "ref": "agentic-sandbox",
        "sha": "6278f04c322e6c8709699984733d9f9781a11976",
        "user": {
          "login": "igooch",
          "id": 13687489,
          "node_id": "MDQ6VXNlcjEzNjg3NDg5",
          "avatar_url": "https://avatars.githubusercontent.com/u/13687489?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/igooch",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1146338058,
          "node_id": "R_kgDORFO7Cg",
          "name": "tunix",
          "full_name": "igooch/tunix",
          "private": false,
          "owner": {
            "login": "igooch",
            "id": 13687489,
            "node_id": "MDQ6VXNlcjEzNjg3NDg5",
            "avatar_url": "https://avatars.githubusercontent.com/u/13687489?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/igooch",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/igooch/tunix",
          "created_at": "2026-01-31T00:00:28Z",
          "updated_at": "2026-02-06T03:36:02Z",
          "pushed_at": "2026-02-06T03:39:25Z",
          "homepage": "",
          "size": 32992,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:deepswe-dev",
        "ref": "deepswe-dev",
        "sha": "b6f7abdb87915aa350835e54678dff92131cc7dc",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1055"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1055"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1055"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1055/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1055/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1055/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/6278f04c322e6c8709699984733d9f9781a11976"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1053",
      "id": 3252536605,
      "node_id": "PR_kwDOOTDVN87B3cUd",
      "number": 1053,
      "state": "open",
      "locked": false,
      "title": "reduce naming support to HF & config_id",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "reduce naming support to HF & config_id\n",
      "created_at": "2026-02-06T00:51:15Z",
      "updated_at": "2026-02-06T00:51:16Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "c417ad17decb86bb81073d1c64f2af2d3cb9cf42",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_864401374",
        "ref": "test_864401374",
        "sha": "9a21e5bc93e5b2a71ab2dbd514adb9d89b3aa946",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "8e10ebb0768348b97553694a4da5e2bd23f8c1a0",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1053"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1053"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1053"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1053/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1053/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1053/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/9a21e5bc93e5b2a71ab2dbd514adb9d89b3aa946"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1041",
      "id": 3240038665,
      "node_id": "PR_kwDOOTDVN87BHxEJ",
      "number": 1041,
      "state": "open",
      "locked": false,
      "title": "[Tiny Feat] add rollout_sglang_jax_log_level in RolloutConfig",
      "user": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #1040.\r\n\r\n`python3 scripts/grpo_demo_llama3_qwen2.py --num-batches 2 --num-test-batches 1  --root-dir=/home/gcpuser/aolemila --rollout-engine sglang_jax  --sglang-jax-log-level debug`\r\n\r\n<img width=\"1214\" height=\"195\" alt=\"image\" src=\"https://github.com/user-attachments/assets/5656aac9-6c75-4965-a333-9b5c62d2d8a2\" />\r\n\r\n<img width=\"544\" height=\"178\" alt=\"image\" src=\"https://github.com/user-attachments/assets/392372bb-8dd5-4bca-b18e-7775eb2ce5d7\" />\r\n\r\n\r\n\r\n> It's a good idea to open an issue first for discussion.\r\n\r\n<!--- Describe your changes in detail. -->\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [ ] I have added all the necessary unit tests for my change.\r\n- [ ] I have verified that my change does not break existing code and all unit tests pass.\r\n- [ ] I have added all appropriate doc-strings/documentation.\r\n- [ ] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [ ] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [ ] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/docs/contributing.md).\r\n",
      "created_at": "2026-02-03T08:24:10Z",
      "updated_at": "2026-02-03T08:45:13Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "64ec55d631ffbb07443ff16349db236fbe64b43d",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:feat/add-debug-argument-sglangjax",
        "ref": "feat/add-debug-argument-sglangjax",
        "sha": "914d0d1c5a44b7a94f36b164c34ee8c8bab36a0c",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f87f213ac3eafab513c5b373a31fe2834c5961c3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1041"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1041"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1041"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1041/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1041/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1041/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/914d0d1c5a44b7a94f36b164c34ee8c8bab36a0c"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        1,
        1040
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1032",
      "id": 3229327089,
      "node_id": "PR_kwDOOTDVN87Ae57x",
      "number": 1032,
      "state": "open",
      "locked": false,
      "title": "Lazily import reward_manager in function_registry.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Lazily import reward_manager in function_registry.\n",
      "created_at": "2026-01-30T21:16:16Z",
      "updated_at": "2026-01-30T21:16:18Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "588f6b6fdf1b330a3b9d95f0d3f7c6da5e581c7f",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_863357035",
        "ref": "test_863357035",
        "sha": "a36c70c710e238dbc268c777393f71e3b7b774bb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "00e0041196f0f6fc6494284c585ba9419026d6bb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1032"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1032"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1032"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1032/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1032/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1032/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/a36c70c710e238dbc268c777393f71e3b7b774bb"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1028",
      "id": 3226119190,
      "node_id": "PR_kwDOOTDVN87ASqwW",
      "number": 1028,
      "state": "open",
      "locked": false,
      "title": "ping dep version",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "ping dep version\n",
      "created_at": "2026-01-30T03:49:33Z",
      "updated_at": "2026-01-30T04:00:51Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_863016506",
        "ref": "test_863016506",
        "sha": "eaa64edf3f80e82269dd70ef70ead5f1a9623793",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "00e0041196f0f6fc6494284c585ba9419026d6bb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1028"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1028"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1028"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1028/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1028/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1028/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/eaa64edf3f80e82269dd70ef70ead5f1a9623793"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1027",
      "id": 3225971896,
      "node_id": "PR_kwDOOTDVN87ASGy4",
      "number": 1027,
      "state": "open",
      "locked": false,
      "title": "Add support for stop strings in vLLM sampler and rollout.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add support for stop strings in vLLM sampler and rollout.\n",
      "created_at": "2026-01-30T02:46:21Z",
      "updated_at": "2026-01-30T02:46:22Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "c13b98d5793ae20b8443986c29aa67125ea9f27e",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_862995259",
        "ref": "test_862995259",
        "sha": "4e151319d2cd8790ba507fbc8181f184368a10db",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "00e0041196f0f6fc6494284c585ba9419026d6bb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1027"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1027"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1027"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1027/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1027/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1027/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/4e151319d2cd8790ba507fbc8181f184368a10db"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1023",
      "id": 3224893026,
      "node_id": "PR_kwDOOTDVN87AN_Zi",
      "number": 1023,
      "state": "open",
      "locked": false,
      "title": "update distillation nnx usage",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "update distillation nnx usage\n",
      "created_at": "2026-01-29T19:55:37Z",
      "updated_at": "2026-01-29T21:19:57Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_862835324",
        "ref": "test_862835324",
        "sha": "8a065fc8478a6b81e8c4bbd7dadee1d3618cc2b7",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "00e0041196f0f6fc6494284c585ba9419026d6bb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1023"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1023"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1023"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1023/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1023/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1023/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/8a065fc8478a6b81e8c4bbd7dadee1d3618cc2b7"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1008",
      "id": 3217413847,
      "node_id": "PR_kwDOOTDVN86_xdbX",
      "number": 1008,
      "state": "open",
      "locked": false,
      "title": "[Tunix] Support scanned to unscanned weight transfer in transfer_state_directly",
      "user": {
        "login": "gagika",
        "id": 38229354,
        "node_id": "MDQ6VXNlcjM4MjI5MzU0",
        "avatar_url": "https://avatars.githubusercontent.com/u/38229354?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/gagika",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR extends the `transfer_state_directly` utility to support weight synchronization from scanned MaxText model (where layers are stacked in a single tensor) to unscanned MaxText + vLLM models (where layers are separate parameters).\r\n\r\nPreviously, `transfer_state_directly` only supported 1-to-1 mapping (Unscanned -> Unscanned). This change adds logic to detect and unroll scanned layers during the transfer process.\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/docs/contributing.md).\r\n",
      "created_at": "2026-01-28T06:42:50Z",
      "updated_at": "2026-02-12T18:48:17Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:agagik-scan",
        "ref": "agagik-scan",
        "sha": "6947e0ecbe7a9fb97667bd40f7d1ab8d7d364716",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "88f08c65c32114295cf5accb73adca156473f562",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1008"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1008"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1008"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1008/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1008/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1008/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/6947e0ecbe7a9fb97667bd40f7d1ab8d7d364716"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1005",
      "id": 3215835545,
      "node_id": "PR_kwDOOTDVN86_rcGZ",
      "number": 1005,
      "state": "open",
      "locked": false,
      "title": "Add trajectory status to track limit.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add trajectory status to track limit.\n* max_steps\n* max_context_limit\n* timeout\n",
      "created_at": "2026-01-27T19:05:07Z",
      "updated_at": "2026-02-14T00:30:40Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "52892bf2afb7fbccb58291f2c71021a835a678ad",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_861800504",
        "ref": "test_861800504",
        "sha": "774f504e1aa4b9b9436d9ba635b828b255ff59a9",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "9f2ac8448d9af9654b639be5271d482ee42a8cc2",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1005"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1005"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1005"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1005/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1005/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1005/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/774f504e1aa4b9b9436d9ba635b828b255ff59a9"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1002",
      "id": 3212569863,
      "node_id": "PR_kwDOOTDVN86_e-0H",
      "number": 1002,
      "state": "open",
      "locked": false,
      "title": "Allow config_id as an alternative model_id to automodel",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Allow config_id as an alternative model_id to automodel\n\nwe don't want to force using the HF id as the only option for the model_id, especially for other sources, such as Kaggle/GCS/CNS. Alternatively, we allow the config_id from the model.py for each model family as the option to be used for model_id (and respectively model_name) for cli and Automodel.\n\nTested by local launch of `./examples/rl/grpo/gsm8k/run_gemma2_2b.sh` on VM\n",
      "created_at": "2026-01-27T00:21:39Z",
      "updated_at": "2026-02-13T00:58:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "805147d91ab03aea31e52aa53f769bb6d1eb32bb",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_861402268",
        "ref": "test_861402268",
        "sha": "974f28f48dc7462ce5643e0756d24b10d9e66f78",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "30e37dcdef7da0df4be2fb275365059794786605",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1002"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1002"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1002"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1002/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1002/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1002/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/974f28f48dc7462ce5643e0756d24b10d9e66f78"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/1000",
      "id": 3207201749,
      "node_id": "PR_kwDOOTDVN86_KgPV",
      "number": 1000,
      "state": "open",
      "locked": false,
      "title": "fix(rl): robust integer validation for utils.py (Fixes #953)",
      "user": {
        "login": "abdulwahabahmedkhanyusufzai",
        "id": 175131310,
        "node_id": "U_kgDOCnBKrg",
        "avatar_url": "https://avatars.githubusercontent.com/u/175131310?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/abdulwahabahmedkhanyusufzai",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR fixes an AttributeError crash encountered when using is_positive_integer with Numpy types (e.g., np.int64) or on Python 3.11+ where certain types lack the .is_integer() method.\r\n\r\nThis supersedes stale PRs #903 and #930. I have consolidated the fix and added the missing unit tests requested by maintainers.\r\n\r\nChanges:\r\n\r\nImplemented a safe is_integer_value helper that handles int, float, and numpy types correctly.\r\n\r\nAdded tests/rl/rl_utils_test.py to verify the fix across all types.\r\n\r\nRelated Issues:\r\n\r\nFixes #953\r\n\r\nResolves #903\r\n\r\nResolves #902\r\n\r\nTest Plan\r\nCreated a new test file tests/rl/rl_utils_test.py. Verified locally with python3 -m unittest tests/rl/rl_utils_test.py.\r\n\r\nResults:\r\n\r\n✅ int (Standard) - Passed\r\n\r\n✅ np.int64 (Numpy) - Passed (Previously crashed)\r\n\r\n✅ float (Standard) - Passed\r\n\r\n✅ bool - Rejected correctly",
      "created_at": "2026-01-24T19:09:28Z",
      "updated_at": "2026-01-28T22:32:23Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "f87e892dbb41bd777b5164527ee5ac1c94aefa02",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "abdulwahabahmedkhanyusufzai:fix/robust-integer-check",
        "ref": "fix/robust-integer-check",
        "sha": "8c6537e70701bfd9f56f68742540993ad891a262",
        "user": {
          "login": "abdulwahabahmedkhanyusufzai",
          "id": 175131310,
          "node_id": "U_kgDOCnBKrg",
          "avatar_url": "https://avatars.githubusercontent.com/u/175131310?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abdulwahabahmedkhanyusufzai",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1141382118,
          "node_id": "R_kgDORAgb5g",
          "name": "tunix",
          "full_name": "abdulwahabahmedkhanyusufzai/tunix",
          "private": false,
          "owner": {
            "login": "abdulwahabahmedkhanyusufzai",
            "id": 175131310,
            "node_id": "U_kgDOCnBKrg",
            "avatar_url": "https://avatars.githubusercontent.com/u/175131310?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/abdulwahabahmedkhanyusufzai",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/abdulwahabahmedkhanyusufzai/tunix",
          "created_at": "2026-01-24T18:54:06Z",
          "updated_at": "2026-01-24T18:54:07Z",
          "pushed_at": "2026-01-25T03:32:57Z",
          "homepage": "",
          "size": 35955,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "b2be96833508ae261122f7b8c3c2663943179a8f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1000"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/1000"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/1000"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/1000/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1000/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/1000/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/8c6537e70701bfd9f56f68742540993ad891a262"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        9,
        953,
        903,
        902
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/999",
      "id": 3205112604,
      "node_id": "PR_kwDOOTDVN86_CiMc",
      "number": 999,
      "state": "open",
      "locked": false,
      "title": "Merge duplicate example content",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Merge duplicate example content\n",
      "created_at": "2026-01-23T22:25:36Z",
      "updated_at": "2026-01-26T23:43:40Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "06245a5ba4b565b5af6204b0564ec6c65df36a47",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_860253084",
        "ref": "test_860253084",
        "sha": "7d01986d99ba868a552eaa053f41d044783f04d0",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "b2be96833508ae261122f7b8c3c2663943179a8f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/999"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/999"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/999"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/999/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/999/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/999/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/7d01986d99ba868a552eaa053f41d044783f04d0"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/997",
      "id": 3200503337,
      "node_id": "PR_kwDOOTDVN86-w84p",
      "number": 997,
      "state": "open",
      "locked": false,
      "title": "Add GRPO natural language-to-SQL example with execution-based reward",
      "user": {
        "login": "NP2241",
        "id": 65132325,
        "node_id": "MDQ6VXNlcjY1MTMyMzI1",
        "avatar_url": "https://avatars.githubusercontent.com/u/65132325?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/NP2241",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #979\r\n\r\n> It's a good idea to open an issue first for discussion.\r\n\r\nThis PR adds a new GRPO example demonstrating natural language to SQL training with an external execution environment. The example shows how to integrate Tunix GRPO with a structured task where rewards are computed by executing generated SQL against a small SQLite database and checking result correctness.\r\n\r\nThe example is intentionally minimal and mirrors the structure of the existing GSM8K GRPO example to serve as a clear reference for users.\r\n\r\n**Reference**\r\n- GitHub issue: https://github.com/google/tunix/issues/979\r\n- Existing GRPO example: `examples/rl/grpo/gsm8k/`\r\n\r\n**Colab Notebook**\r\nN/A — this PR adds an example recipe under `examples/` and does not introduce a new public API.\r\n\r\n**Checklist**\r\n\r\n- [x] I have added all the necessary unit tests for my change.  \r\n  _N/A — this PR adds an example and does not modify core library logic._\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch.\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2026-01-22T18:39:18Z",
      "updated_at": "2026-01-22T18:39:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "12636d9009165990a007b7b96f231d4d9a7fc900",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "NP2241:grpo-nl2sql-example",
        "ref": "grpo-nl2sql-example",
        "sha": "d1b3f24ed3af5e3dfc636cc5d10180653a19bcac",
        "user": {
          "login": "NP2241",
          "id": 65132325,
          "node_id": "MDQ6VXNlcjY1MTMyMzI1",
          "avatar_url": "https://avatars.githubusercontent.com/u/65132325?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/NP2241",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1135156141,
          "node_id": "R_kgDOQ6kbrQ",
          "name": "tunix",
          "full_name": "NP2241/tunix",
          "private": false,
          "owner": {
            "login": "NP2241",
            "id": 65132325,
            "node_id": "MDQ6VXNlcjY1MTMyMzI1",
            "avatar_url": "https://avatars.githubusercontent.com/u/65132325?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/NP2241",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/NP2241/tunix",
          "created_at": "2026-01-15T18:04:13Z",
          "updated_at": "2026-01-15T18:04:13Z",
          "pushed_at": "2026-01-15T23:19:00Z",
          "homepage": "",
          "size": 14636,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "45e36894518ecd2d977d8a369db74337110fcb2c",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/997"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/997"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/997"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/997/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/997/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/997/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d1b3f24ed3af5e3dfc636cc5d10180653a19bcac"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        9,
        979
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/996",
      "id": 3197877136,
      "node_id": "PR_kwDOOTDVN86-m7uQ",
      "number": 996,
      "state": "open",
      "locked": false,
      "title": "remove pip install jax==0.8.1 flax==0.12.0 libtpu==0.0.24",
      "user": {
        "login": "aolemila",
        "id": 214426322,
        "node_id": "U_kgDODMfi0g",
        "avatar_url": "https://avatars.githubusercontent.com/u/214426322?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aolemila",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #995.\r\n\r\n> It's a good idea to open an issue first for discussion.\r\n\r\n<!--- Describe your changes in detail. -->\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [ ] I have added all the necessary unit tests for my change.\r\n- [ ] I have verified that my change does not break existing code and all unit tests pass.\r\n- [ ] I have added all appropriate doc-strings/documentation.\r\n- [ ] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [ ] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [ ] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2026-01-22T04:47:59Z",
      "updated_at": "2026-01-22T06:42:54Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "cec022b668de3f10ebc3f6188675a2f5959be141",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:fix/remove-flax-fixed-version",
        "ref": "fix/remove-flax-fixed-version",
        "sha": "eab4f0c30d08e5f8509c2f3c34c1f63d9bc8f57a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "45e36894518ecd2d977d8a369db74337110fcb2c",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/996"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/996"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/996"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/996/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/996/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/996/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/eab4f0c30d08e5f8509c2f3c34c1f63d9bc8f57a"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        9,
        995
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/993",
      "id": 3196597116,
      "node_id": "PR_kwDOOTDVN86-iDN8",
      "number": 993,
      "state": "open",
      "locked": false,
      "title": "doc: fix indentation in README.md.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "doc: fix indentation in README.md.\n",
      "created_at": "2026-01-21T19:51:55Z",
      "updated_at": "2026-01-21T19:51:57Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_859198067",
        "ref": "test_859198067",
        "sha": "cd7cde3b4b6a3f1ae009f2dbbe86d475756a1892",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "8de77e30223db439e908cdeded31cce5d379859a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/993"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/993"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/993"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/993/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/993/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/993/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/cd7cde3b4b6a3f1ae009f2dbbe86d475756a1892"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/992",
      "id": 3196424736,
      "node_id": "PR_kwDOOTDVN86-hZIg",
      "number": 992,
      "state": "open",
      "locked": false,
      "title": "[Tunix] Improve the reshard logging. Current logging only polls on the results for on device finish time. We need to do the same thing for the inputs for accurate logging. This cl splits the total wait time to waiting for input time and output ready time.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[Tunix] Improve the reshard logging. Current logging only polls on the results for on device finish time. We need to do the same thing for the inputs for accurate logging. This cl splits the total wait time to waiting for input time and output ready time.\n",
      "created_at": "2026-01-21T18:52:28Z",
      "updated_at": "2026-01-21T20:11:11Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "90d4844104c0fff8642d0b9d2e991ad88a07258b",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_859171150",
        "ref": "test_859171150",
        "sha": "3da15fc6617df522753236fdb41a934f4fb4ff7f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "8de77e30223db439e908cdeded31cce5d379859a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/992"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/992"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/992"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/992/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/992/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/992/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/3da15fc6617df522753236fdb41a934f4fb4ff7f"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/978",
      "id": 3178146439,
      "node_id": "PR_kwDOOTDVN869bqqH",
      "number": 978,
      "state": "open",
      "locked": false,
      "title": "Feature/gdpo",
      "user": {
        "login": "kmsgnnew",
        "id": 16554470,
        "node_id": "MDQ6VXNlcjE2NTU0NDcw",
        "avatar_url": "https://avatars.githubusercontent.com/u/16554470?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kmsgnnew",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #977 \r\n\r\nhttps://github.com/google/tunix/issues/977\r\n\r\n<!--- Describe your changes in detail. -->\r\nAdded implementation of GDPO. Shared below reference link and implementation. This paper improves upon GRPO.\r\n\r\n**Reference**\r\nReference paper\r\nhttps://arxiv.org/abs/2601.05242\r\nReference Implementation \r\nhttps://github.com/NVlabs/GDPO/blob/b080e63d0126870ad08acc8ebc3f04b728175a9e/trl-GDPO/trl-0.18.0-gdpo/trl/trainer/grpo_trainer.py#L1222\r\n\r\n**Colab Notebook**\r\nNiL\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2026-01-15T17:27:39Z",
      "updated_at": "2026-02-08T17:18:10Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "5870a4a7a7e4d1b77f0be6ad00aeaa8542318ed5",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "kmsgnnew:feature/GDPO",
        "ref": "feature/GDPO",
        "sha": "07fdb46050ffd402136077ef3286530d68d0d8ce",
        "user": {
          "login": "kmsgnnew",
          "id": 16554470,
          "node_id": "MDQ6VXNlcjE2NTU0NDcw",
          "avatar_url": "https://avatars.githubusercontent.com/u/16554470?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/kmsgnnew",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1134776921,
          "node_id": "R_kgDOQ6NSWQ",
          "name": "tunix",
          "full_name": "kmsgnnew/tunix",
          "private": false,
          "owner": {
            "login": "kmsgnnew",
            "id": 16554470,
            "node_id": "MDQ6VXNlcjE2NTU0NDcw",
            "avatar_url": "https://avatars.githubusercontent.com/u/16554470?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/kmsgnnew",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/kmsgnnew/tunix",
          "created_at": "2026-01-15T07:28:27Z",
          "updated_at": "2026-01-15T16:37:19Z",
          "pushed_at": "2026-02-08T17:15:30Z",
          "homepage": "",
          "size": 11524,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "812b96dbc4ce1478c3916fd63eac146677df562b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/978"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/978"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/978"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/978/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/978/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/978/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/07fdb46050ffd402136077ef3286530d68d0d8ce"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        9,
        977
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/972",
      "id": 3170743634,
      "node_id": "PR_kwDOOTDVN868_bVS",
      "number": 972,
      "state": "open",
      "locked": false,
      "title": "[Tunix] Fix the safetensors saving. When loading the base model state, it should load all the safetensor file instead of a hardcoded one.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[Tunix] Fix the safetensors saving. When loading the base model state, it should load all the safetensor file instead of a hardcoded one.\n",
      "created_at": "2026-01-13T18:19:47Z",
      "updated_at": "2026-01-13T18:19:49Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_855780474",
        "ref": "test_855780474",
        "sha": "40b4ab473baa79477e94fb68e02699c1dbdb1216",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f76f9f48927ada8b1c97fcd9dc70a5a1d7845985",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/972"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/972"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/972"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/972/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/972/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/972/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/40b4ab473baa79477e94fb68e02699c1dbdb1216"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/967",
      "id": 3166654897,
      "node_id": "PR_kwDOOTDVN868v1Gx",
      "number": 967,
      "state": "open",
      "locked": false,
      "title": "Fix PeftTrainer input sharding for raw inputs and add regression test",
      "user": {
        "login": "jayshrivastava0",
        "id": 98177190,
        "node_id": "U_kgDOBdoQpg",
        "avatar_url": "https://avatars.githubusercontent.com/u/98177190?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/jayshrivastava0",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #965 \r\n\r\n<!--- Describe your changes in detail. -->\r\n\r\n### Description\r\nThis PR fixes a `TypeError` when training with datasets containing raw inputs (e.g., strings) that require processing via `gen_model_input_fn` before becoming valid JAX arrays.\r\n\r\n**The Problem:**\r\nPreviously, `sharding_utils.shard_input` was executed on the dataset items *before* `gen_model_input_fn` had a chance to transform them. Since raw types like `str` are not valid JAX types, the sharding utility crashed. The transformation logic was incorrectly placed inside the JIT-compiled `_train_step` and `_eval_step`.\r\n\r\n**The Fix:**\r\n- Modified `tunix/sft/peft_trainer.py`:\r\n    - Moved the execution of `self.gen_model_input_fn(inputs)` out of `_train_step` and `_eval_step`.\r\n    - Placed the execution inside the `train()` and `_run_eval()` loops, explicitly **after** `_prepare_inputs` and **before** `sharding_utils.shard_input`.\r\n- This ensures that `shard_input` always receives valid JAX/NumPy arrays.\r\n\r\n**Verification:**\r\n- Added a new regression test `test_input_processing_order` in `tunix/tests/sft/peft_trainer_test.py`.\r\n- The test simulates a user passing raw text data (`[{\"raw_text\": \"...\"}]`) and defines a custom input generator to tokenize it.\r\n- Confirmed that the test passes with this fix (previously it would crash).\r\n- Confirmed that existing tests (e.g., `test_compile_once`, `test_dist_training`) still pass.\r\n\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\nIssue #965: Confused about with_gen_model_input_fn()\r\n\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\nN/A (The error is reproduced and verified via the new unit test `test_input_processing_order` added in this PR).\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2026-01-12T17:14:25Z",
      "updated_at": "2026-01-12T17:14:27Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "b674509e2f58a6196f8f3e66f4a4240ab2d037bb",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "jayshrivastava0:fix/peft-trainer-input-sharding",
        "ref": "fix/peft-trainer-input-sharding",
        "sha": "5ff60c2ce7f7d64f35901a28cdab8ab0c9083f3e",
        "user": {
          "login": "jayshrivastava0",
          "id": 98177190,
          "node_id": "U_kgDOBdoQpg",
          "avatar_url": "https://avatars.githubusercontent.com/u/98177190?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jayshrivastava0",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1132871834,
          "node_id": "R_kgDOQ4ZAmg",
          "name": "tunix",
          "full_name": "jayshrivastava0/tunix",
          "private": false,
          "owner": {
            "login": "jayshrivastava0",
            "id": 98177190,
            "node_id": "U_kgDOBdoQpg",
            "avatar_url": "https://avatars.githubusercontent.com/u/98177190?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/jayshrivastava0",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/jayshrivastava0/tunix",
          "created_at": "2026-01-12T15:09:20Z",
          "updated_at": "2026-01-12T15:09:20Z",
          "pushed_at": "2026-01-12T16:46:43Z",
          "homepage": "",
          "size": 14583,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "d8d0732a53f1a8d7b37d8c32b4cd606d584c1a54",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/967"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/967"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/967"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/967/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/967/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/967/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/5ff60c2ce7f7d64f35901a28cdab8ab0c9083f3e"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        9,
        965
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/966",
      "id": 3164194971,
      "node_id": "PR_kwDOOTDVN868mcib",
      "number": 966,
      "state": "open",
      "locked": false,
      "title": "[Not ready for review] Memory Optimizations on Gemma2 2B",
      "user": {
        "login": "Green0-0",
        "id": 138409197,
        "node_id": "U_kgDOCD_07Q",
        "avatar_url": "https://avatars.githubusercontent.com/u/138409197?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Green0-0",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR should NOT be looked at.\r\n\r\nI am only creating this PR because I was told at https://www.kaggle.com/competitions/google-tunix-hackathon/discussion/666550 that I must submit a PR to have my competition submission be eligible.\r\n\r\nOtherwise I would not recommend anyone even spend time looking at the code, this PR has a bunch of things jumbled together (including personal files for the competition submission), most of it is low-quality and screws with the current codebase.\r\n\r\nOnce the competition concludes and I see that my notebook actually works, I'll try to break apart this PR into individual features (or open issues instead of trying to PR code) that work with the codebase.\r\n\r\nFor those curious, this PR is supposed to implement the following:\r\nhttps://unsloth.ai/blog/gradient (Gradient accumulation fix)\r\nhttps://github.com/apple/ml-cross-entropy (Cut cross entropy)\r\nhttps://github.com/jax-ml/jax/pull/28099/files/940747949e3b8ddf60cf82480ba681cd8c11e129#diff-5e175da3ab167ed5441d24c3e92faf1162c3583ffcbf0feaee161ffae0b8721a (Flash attention with softcap for gemma2)\r\nFull model rematerialization\r\nhttps://arxiv.org/abs/2405.14734 (SimPO)\r\n\r\nThe notebook attached with this PR should in theory work, if anyone actually wants to test. \r\n\r\nAlso, I'm very sorry for not following the contributing guidelines.",
      "created_at": "2026-01-12T00:52:38Z",
      "updated_at": "2026-01-12T00:52:44Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "Green0-0:main",
        "ref": "main",
        "sha": "b15927af5cd397f9c470d69a178981cc576ea9f2",
        "user": {
          "login": "Green0-0",
          "id": 138409197,
          "node_id": "U_kgDOCD_07Q",
          "avatar_url": "https://avatars.githubusercontent.com/u/138409197?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Green0-0",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1120810231,
          "node_id": "R_kgDOQs409w",
          "name": "tunix-cce",
          "full_name": "Green0-0/tunix-cce",
          "private": false,
          "owner": {
            "login": "Green0-0",
            "id": 138409197,
            "node_id": "U_kgDOCD_07Q",
            "avatar_url": "https://avatars.githubusercontent.com/u/138409197?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/Green0-0",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/Green0-0/tunix-cce",
          "created_at": "2025-12-22T01:27:05Z",
          "updated_at": "2026-01-11T17:41:20Z",
          "pushed_at": "2026-01-11T17:41:16Z",
          "homepage": "",
          "size": 15325,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "d8d0732a53f1a8d7b37d8c32b4cd606d584c1a54",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/966"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/966"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/966"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/966/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/966/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/966/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/b15927af5cd397f9c470d69a178981cc576ea9f2"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/964",
      "id": 3163127541,
      "node_id": "PR_kwDOOTDVN868iX71",
      "number": 964,
      "state": "open",
      "locked": false,
      "title": "fix: Add truncation support to pad_to_length for consistent prompt shapes",
      "user": {
        "login": "Cascoopman",
        "id": 58267444,
        "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
        "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Cascoopman",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "## Problem\r\n\r\nWhen `max_prompt_length` is explicitly specified (e.g., 128), the sampler could produce inconsistent prompt shapes across batches:\r\n\r\n1. `pad_to_length()` in `generate/utils.py` returned inputs unchanged if they exceeded `target_length`\r\n2. The sampler auto-increased `max_prompt_length` via `next_power_of_2()` when prompts were longer\r\n3. Different micro-batches could have different prompt shapes (e.g., batch 1: `(N, 128)`, batch 2: `(N, 256)`)\r\n4. `rl_cluster.generate()` failed when concatenating micro-batch outputs due to shape mismatch\r\n\r\n\r\n## Solution\r\n\r\n### 1. Add `truncate` parameter to `pad_to_length()` (`generate/utils.py`)\r\n\r\n```python\r\ndef pad_to_length(x, target_length, pad_value=0, left=False, axis=0, truncate=False):\r\n    # When truncate=True and left=True: keeps last target_length elements\r\n    # When truncate=True and left=False: keeps first target_length elements\r\n```\r\n\r\n### 2. Update sampler to use truncation when length is specified (`generate/sampler.py`)\r\n\r\n```python\r\nuser_specified_length = max_prompt_length is not None\r\nif max_prompt_length is None or max_prompt_length < max_tokens_length:\r\n    if user_specified_length:\r\n        pass  # Keep user-specified length, will truncate\r\n    else:\r\n        max_prompt_length = utils.next_power_of_2(max_tokens_length)\r\n\r\nall_input_ids = np.array([\r\n    utils.pad_to_length(x, ..., truncate=user_specified_length)\r\n    for x in tokens\r\n])\r\n```\r\n\r\n## Backward Compatibility\r\n\r\n- If `max_prompt_length` is `None`, the sampler still auto-sizes to accommodate all prompts (original behavior)\r\n- If `max_prompt_length` is explicitly specified, it's now respected via truncation (new behavior)\r\n\r\n## Testing\r\n\r\n- All existing sampler tests pass\r\n- All GRPO learner tests pass\r\n- Verified truncation behavior with unit tests\r\n\r\n## Related\r\n\r\nFixes the shape mismatch error when using `MAX_PROMPT_LENGTH <= 128` in GRPO training.",
      "created_at": "2026-01-11T11:35:26Z",
      "updated_at": "2026-01-11T11:38:51Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "2085325416429edaf6c319f012530b021148049d",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "Cascoopman:fix/max-prompt-length-truncation",
        "ref": "fix/max-prompt-length-truncation",
        "sha": "f2537ef6cbbebab1b997f0c7c6e2a0411f223168",
        "user": {
          "login": "Cascoopman",
          "id": 58267444,
          "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
          "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Cascoopman",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1132085937,
          "node_id": "R_kgDOQ3pCsQ",
          "name": "tunix",
          "full_name": "Cascoopman/tunix",
          "private": false,
          "owner": {
            "login": "Cascoopman",
            "id": 58267444,
            "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
            "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/Cascoopman",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/Cascoopman/tunix",
          "created_at": "2026-01-11T09:48:48Z",
          "updated_at": "2026-01-11T09:48:48Z",
          "pushed_at": "2026-01-11T11:35:02Z",
          "homepage": "",
          "size": 81160,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "d8d0732a53f1a8d7b37d8c32b4cd606d584c1a54",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/964"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/964"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/964"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/964/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/964/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/964/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/f2537ef6cbbebab1b997f0c7c6e2a0411f223168"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/963",
      "id": 3163063183,
      "node_id": "PR_kwDOOTDVN868iIOP",
      "number": 963,
      "state": "open",
      "locked": false,
      "title": "Fix batch_size=1 token_buffer truncation in sampler",
      "user": {
        "login": "Cascoopman",
        "id": 58267444,
        "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
        "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Cascoopman",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "## Summary\n\nFixes #809\n\nWhen using the generic sampler with `batch_size=1`, the `token_buffer` was being truncated instead of properly populated during the `while_loop`. This made the sampler unusable when `TRAIN_MICRO_BATCH_SIZE=1`, yet it worked fine for larger batches.\n\n## Root Cause\n\nThe issue was caused by using Python integers for `decoding_step` indexing inside `jax.lax.while_loop`. When JAX traces through a while_loop, using Python integers for dynamic indexing can cause issues with how the traced computation is specialized. With `batch_size=1`, JAX may incorrectly optimize or trace the array update operations (`.at[:, decoding_step + 1].set(...)`).\n\nThe Gemma-specific sampler (`tunix/tunix/models/gemma/sampler.py`) already had this fix at line 440:\n```python\ndecoding_step = jnp.asarray(sampler_state.decoding_step, dtype=jnp.int32)\n```\n\nBut the generic sampler was missing this conversion.\n\n## Changes\n\n1. **`tunix/generate/sampler.py`**:\n   - Initialize `decoding_step` as `jnp.int32(num_input_tokens - 1)` in `init_sample_state`\n   - Add explicit `jnp.asarray()` conversion in `_sample()` method\n   - Add explicit `jnp.asarray()` conversion in `_sample_step()` method with a comment referencing the issue\n\n2. **`tests/generate/sampler_test.py`**:\n   - Added `test_batch_size_one()` test case\n   - Added `test_batch_size_one_with_echo()` test case\n\n## Testing\n\n- Ran all existing sampler tests - all pass\n- Ran new batch_size=1 tests - all pass\n- Verified fix with standalone reproduction script testing while_loop behavior\n\n## Related\n\nThis fix aligns the generic sampler with the Gemma sampler implementation which already had this fix.",
      "created_at": "2026-01-11T10:15:49Z",
      "updated_at": "2026-01-11T10:15:50Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "01fa0df161b93e37c034b83578047c188660de50",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "Cascoopman:fix/batch-size-1-sampler-issue-809",
        "ref": "fix/batch-size-1-sampler-issue-809",
        "sha": "8625b5f77f10c4322a91094f5f5dea13f726d5d2",
        "user": {
          "login": "Cascoopman",
          "id": 58267444,
          "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
          "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Cascoopman",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1132085937,
          "node_id": "R_kgDOQ3pCsQ",
          "name": "tunix",
          "full_name": "Cascoopman/tunix",
          "private": false,
          "owner": {
            "login": "Cascoopman",
            "id": 58267444,
            "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
            "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/Cascoopman",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/Cascoopman/tunix",
          "created_at": "2026-01-11T09:48:48Z",
          "updated_at": "2026-01-11T09:48:48Z",
          "pushed_at": "2026-01-11T11:35:02Z",
          "homepage": "",
          "size": 81160,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "d8d0732a53f1a8d7b37d8c32b4cd606d584c1a54",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/963"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/963"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/963"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/963/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/963/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/963/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/8625b5f77f10c4322a91094f5f5dea13f726d5d2"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        8,
        809
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/961",
      "id": 3163042480,
      "node_id": "PR_kwDOOTDVN868iDKw",
      "number": 961,
      "state": "open",
      "locked": false,
      "title": "feat(agentic): Add tool calling support for GRPO training",
      "user": {
        "login": "Cascoopman",
        "id": 58267444,
        "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
        "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Cascoopman",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "## Summary\n\nThis PR graduates the experimental tool calling feature to a stable API and adds comprehensive support for training LLMs to use tools during reasoning.\n\n## New Features\n\n### ExpressionCalculatorTool\n- Safe mathematical expression evaluator using Python's AST\n- Supports +, -, *, /, parentheses, and negative numbers\n- No use of eval() for security\n\n### AgenticGRPOLearner\n- Extends GRPO to support multi-turn tool interactions\n- Configurable tool_map parameter for custom tools\n- Supports async rollout for efficient parallel training\n- Compatible with existing GRPO reward functions\n\n### New Configuration Options\n- `max_tool_steps`: Maximum tool interaction turns per episode\n- `tool_parser_name`: Parser for tool call tags (qwen, gemini)\n- `tool_map`: Dictionary of available tools\n\n## Files Added\n- `tunix/rl/agentic/agentic_grpo_learner.py`\n- `tunix/rl/agentic/tools/expression_calculator_tool.py`\n- `tunix/rl/agentic/__init__.py`\n- `tunix/rl/agentic/tools/__init__.py`\n- `examples/agentic/tool_calling_grpo_demo.py`\n- `tests/rl/agentic/agentic_grpo_learner_test.py`\n- `tests/rl/agentic/tools/expression_calculator_test.py`\n\n## Usage Example\n```python\nfrom tunix.rl.agentic import AgenticGRPOConfig, AgenticGRPOLearner\nfrom tunix.rl.agentic.tools import ExpressionCalculatorTool\n\n# Define tools\ntool_map = {'calculator': ExpressionCalculatorTool}\n\n# Create config with tool calling enabled\nconfig = AgenticGRPOConfig(\n    num_generations=4,\n    num_iterations=2,\n    system_prompt='You have access to a calculator tool...',\n    max_concurrency=4,\n)\n\n# Create learner with tool support\nlearner = AgenticGRPOLearner(\n    rl_cluster=rl_cluster,\n    reward_fns=my_reward_fns,\n    algo_config=config,\n    tool_map=tool_map,\n)\n\nlearner.train(train_dataset, eval_dataset)\n```\n\n## Testing\n- 22 unit tests for ExpressionCalculatorTool (all passing)\n- 10 unit tests for AgenticGRPOConfig (all passing)\n- Full training loop tested on Mac CPU/Metal\n\n## Breaking Changes\nNone - this is purely additive functionality.\n",
      "created_at": "2026-01-11T09:49:21Z",
      "updated_at": "2026-01-11T09:56:43Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "Cascoopman:feature/tool-calling-support",
        "ref": "feature/tool-calling-support",
        "sha": "570da4c1e736585231132ae70fd0a5afae65971f",
        "user": {
          "login": "Cascoopman",
          "id": 58267444,
          "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
          "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Cascoopman",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1132085937,
          "node_id": "R_kgDOQ3pCsQ",
          "name": "tunix",
          "full_name": "Cascoopman/tunix",
          "private": false,
          "owner": {
            "login": "Cascoopman",
            "id": 58267444,
            "node_id": "MDQ6VXNlcjU4MjY3NDQ0",
            "avatar_url": "https://avatars.githubusercontent.com/u/58267444?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/Cascoopman",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/Cascoopman/tunix",
          "created_at": "2026-01-11T09:48:48Z",
          "updated_at": "2026-01-11T09:48:48Z",
          "pushed_at": "2026-01-11T11:35:02Z",
          "homepage": "",
          "size": 81160,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "d8d0732a53f1a8d7b37d8c32b4cd606d584c1a54",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/961"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/961"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/961"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/961/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/961/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/961/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/570da4c1e736585231132ae70fd0a5afae65971f"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/958",
      "id": 3159330000,
      "node_id": "PR_kwDOOTDVN868T4zQ",
      "number": 958,
      "state": "open",
      "locked": false,
      "title": "Fix #802: Add google-cloud-storage and gcsfs to dependencies",
      "user": {
        "login": "vector-one",
        "id": 165829168,
        "node_id": "U_kgDOCeJaMA",
        "avatar_url": "https://avatars.githubusercontent.com/u/165829168?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/vector-one",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #802\r\n\r\n## Description\r\n\r\nThis PR fixes missing dependencies that caused `ImportError` when running example scripts in OSS environment.\r\n\r\n**Issues Fixed:**\r\n1. `ImportError: cannot import name 'storage' from 'google.cloud'` at `train_deepscaler_nb.py:151`\r\n2. `ModuleNotFoundError: No module named 'gcsfs'` at `train_deepscaler_nb.py:234`\r\n\r\n**Changes:**\r\n- Added `google-cloud-storage` to dependencies (required for GCS file operations in OSS environment)\r\n- Added `gcsfs` to dependencies (required for accessing `gs://` URIs via fsspec)\r\n\r\nBoth dependencies are used by example notebooks (`train_deepscaler_nb.py`, `math_eval_nb.py`) to access Google Cloud Storage buckets for data and models.\r\n\r\n**Reference**\r\n- Issue: #802\r\n- Affected files: `examples/deepscaler/train_deepscaler_nb.py`, `examples/deepscaler/math_eval_nb.py`\r\n\r\n**Colab Notebook**\r\nN/A - This is a dependency fix, not a new API addition.\r\n\r\n**Checklist**\r\n\r\n- [ ] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [ ] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x ] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2026-01-09T11:16:12Z",
      "updated_at": "2026-01-29T20:06:35Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "cff305ae14366e86ac731a4e368fee6d92bf8672",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "vector-one:fix/issue-802-missing-dependencies",
        "ref": "fix/issue-802-missing-dependencies",
        "sha": "fa725561fc19df012e3ee666eb3c8532c7d27ceb",
        "user": {
          "login": "vector-one",
          "id": 165829168,
          "node_id": "U_kgDOCeJaMA",
          "avatar_url": "https://avatars.githubusercontent.com/u/165829168?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/vector-one",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1113834162,
          "node_id": "R_kgDOQmPCsg",
          "name": "tunix",
          "full_name": "vector-one/tunix",
          "private": false,
          "owner": {
            "login": "vector-one",
            "id": 165829168,
            "node_id": "U_kgDOCeJaMA",
            "avatar_url": "https://avatars.githubusercontent.com/u/165829168?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/vector-one",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/vector-one/tunix",
          "created_at": "2025-12-10T14:27:19Z",
          "updated_at": "2026-01-09T09:20:54Z",
          "pushed_at": "2026-01-09T11:13:51Z",
          "homepage": "",
          "size": 14578,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "a8a69942d5020702ec064f761fbc496053152ddd",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/958"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/958"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/958"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/958/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/958/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/958/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/fa725561fc19df012e3ee666eb3c8532c7d27ceb"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        8,
        802
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/933",
      "id": 3124049859,
      "node_id": "PR_kwDOOTDVN866NTfD",
      "number": 933,
      "state": "open",
      "locked": false,
      "title": "Add CRD distillation strategy and tests",
      "user": {
        "login": "surajyadav-research",
        "id": 223458481,
        "node_id": "U_kgDODVG0sQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/223458481?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/surajyadav-research",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "## Summary\r\nAdds **Contrastive Representation Distillation (CRD)** to Tunix: an InfoNCE-style contrastive loss between student/teacher **intermediate representations** captured via `sowed_module`, combined with the supervised loss. #887\r\n\r\n## Implementation (CRD)\r\n- Wraps selected student/teacher layers with `sowed_module` to capture intermediates.\r\n- Pools each captured feature leaf to `(B, C)`:\r\n  - `(B, C)` → use as-is  \r\n  - `(B, T, C)` + `input_mask` → masked mean over `T`  \r\n  - otherwise mean over non-batch/non-channel dims (e.g. `(B, H, W, C)`).\r\n- Stacks pooled leaves to `(N, B, C)` and averages over `N` to get `(B, C)`.\r\n- Projects to a shared embedding space (MLP/linear), L2-normalizes, and computes **InfoNCE with in-batch negatives** (optional symmetric).\r\n- Training loss: `alpha * crd_loss + (1 - alpha) * task_ce`. Teacher features use `stop_gradient`.\r\n- `pre_process_models` wraps models + adds heads; `post_process_models` unwraps and restores original models.\r\n\r\n## Tests\r\n- `feature_extraction_test.py`\r\n  - Avg-pooling (VALID/SAME + include/exclude pad) + error cases\r\n  - `sowed_module` wrap/pop/unwrap (single + multi-leaf capture; shape-safe matching)\r\n  - Feature projection setup/removal integration\r\n- `strategies_test.py`\r\n  - LogitStrategy matches manual KL+CE\r\n  - Smoke tests: FeaturePoolingStrategy, FeatureProjectionStrategy, and CRD\r\n  - Verifies losses are scalars and sowed wrappers are removed in post-process\r\n\r\n## Testing\r\n```bash\r\npython -m ruff format --check \\\r\n  tunix/distillation/strategies/crd_strategy.py \\\r\n  tests/distillation/feature_extraction_test.py \\\r\n  tests/distillation/strategies_test.py\r\n\r\npython -m pytest -q \\\r\n  tests/distillation/feature_extraction_test.py \\\r\n  tests/distillation/strategies_test.py",
      "created_at": "2025-12-22T19:59:45Z",
      "updated_at": "2026-01-06T17:43:22Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "82153421c25332cbfd986f50e6e60c73c48593ae",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "surajyadav-research:crd",
        "ref": "crd",
        "sha": "d8421e9a02058128ace05f1e887ed1377dee9d5e",
        "user": {
          "login": "surajyadav-research",
          "id": 223458481,
          "node_id": "U_kgDODVG0sQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/223458481?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/surajyadav-research",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1121207269,
          "node_id": "R_kgDOQtRD5Q",
          "name": "tunix",
          "full_name": "surajyadav-research/tunix",
          "private": false,
          "owner": {
            "login": "surajyadav-research",
            "id": 223458481,
            "node_id": "U_kgDODVG0sQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/223458481?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/surajyadav-research",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/surajyadav-research/tunix",
          "created_at": "2025-12-22T15:56:15Z",
          "updated_at": "2025-12-22T15:56:15Z",
          "pushed_at": "2025-12-22T19:53:19Z",
          "homepage": "",
          "size": 14509,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "c948ebe21c2edb2fcc4d152e1bd7192011229001",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/933"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/933"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/933"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/933/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/933/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/933/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d8421e9a02058128ace05f1e887ed1377dee9d5e"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        8
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/932",
      "id": 3123852339,
      "node_id": "PR_kwDOOTDVN866MjQz",
      "number": 932,
      "state": "open",
      "locked": false,
      "title": "[Tunix] Update dataset initialization in nightly regression script and add to CI.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[Tunix] Update dataset initialization in nightly regression script and add to CI.\n",
      "created_at": "2025-12-22T18:37:29Z",
      "updated_at": "2025-12-22T18:47:23Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_847812697",
        "ref": "test_847812697",
        "sha": "8d512db8df438b4f55a4577d15726a20ebcdbec7",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "db21d5fa3cb7bc4d3617b6cce762ff936ee181b2",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/932"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/932"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/932"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/932/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/932/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/932/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/8d512db8df438b4f55a4577d15726a20ebcdbec7"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/930",
      "id": 3120931640,
      "node_id": "PR_kwDOOTDVN866BaM4",
      "number": 930,
      "state": "open",
      "locked": false,
      "title": "fix(utils): correct positive integer validation",
      "user": {
        "login": "parthmaheshwari-hub",
        "id": 250858990,
        "node_id": "U_kgDODvPN7g",
        "avatar_url": "https://avatars.githubusercontent.com/u/250858990?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/parthmaheshwari-hub",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fixes #902 \r\n\r\nThe previous implementation incorrectly called `is_integer()` on Python\r\nints, which raises an AttributeError. This change replaces the check\r\nwith a proper `isinstance(value, int)` validation.\r\n",
      "created_at": "2025-12-21T19:08:36Z",
      "updated_at": "2025-12-21T19:10:24Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "bdfb96da9a0454bc8031aab676b99485ca22f914",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "parthmaheshwari-hub:fix/is-positive-integer",
        "ref": "fix/is-positive-integer",
        "sha": "370a84405eb62b5880894e650628e9572ef2d837",
        "user": {
          "login": "parthmaheshwari-hub",
          "id": 250858990,
          "node_id": "U_kgDODvPN7g",
          "avatar_url": "https://avatars.githubusercontent.com/u/250858990?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/parthmaheshwari-hub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1120682044,
          "node_id": "R_kgDOQsxAPA",
          "name": "tunix",
          "full_name": "parthmaheshwari-hub/tunix",
          "private": false,
          "owner": {
            "login": "parthmaheshwari-hub",
            "id": 250858990,
            "node_id": "U_kgDODvPN7g",
            "avatar_url": "https://avatars.githubusercontent.com/u/250858990?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/parthmaheshwari-hub",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/parthmaheshwari-hub/tunix",
          "created_at": "2025-12-21T18:15:36Z",
          "updated_at": "2025-12-21T18:39:08Z",
          "pushed_at": "2025-12-21T19:05:47Z",
          "homepage": "",
          "size": 17031,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "39e1e9498f513a3ec5edde5b7eb37073ee1cb3e3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/930"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/930"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/930"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/930/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/930/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/930/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/370a84405eb62b5880894e650628e9572ef2d837"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        9,
        902
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/927",
      "id": 3120409931,
      "node_id": "PR_kwDOOTDVN865_a1L",
      "number": 927,
      "state": "open",
      "locked": false,
      "title": "Refactor tokenizer adapter to support special EOS token",
      "user": {
        "login": "kamalkraj",
        "id": 17096858,
        "node_id": "MDQ6VXNlcjE3MDk2ODU4",
        "avatar_url": "https://avatars.githubusercontent.com/u/17096858?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kamalkraj",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "## Add BOS/EOS Token Handling in Tokenizer Adapter\n\nThe tokenizer adapter now supports configurable beginning-of-sequence (BOS) and end-of-sequence (EOS) token insertion through `add_bos` and `add_eos` flags. This feature is essential for Supervised Fine-Tuning (SFT) workflows where:\n\n- Input sequences should start with a BOS token\n- Target sequences should end with an EOS token (without a BOS token)\n\nThe implementation automatically prepends or appends the respective tokens based on the specified flags.\n\n## Special EOS Token Support\n\nThe tokenizer adapter allows you to specify custom EOS tokens for models that use non-standard sequence terminators. This is particularly useful for instruction-tuned models:\n\n- **Use Case Example:** Instruction-tuned Gemma models use `<end_of_turn>` as their EOS token instead of the standard token\n- **Benefit:** Ensures compatibility with diverse model architectures and tokenization schemes\n\nThese enhancements include comprehensive unit tests to verify correct token handling behavior across various scenarios.\n\n\n**Checklist**\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\n\n- [x] I have added all the necessary unit tests for my change.\n- [x] I have verified that my change does not break existing code and all unit tests pass.\n- [x] I have added all appropriate doc-strings/documentation.\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).",
      "created_at": "2025-12-21T06:33:20Z",
      "updated_at": "2025-12-21T06:36:58Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "034ee1c122781ab4b18dbca0dce4df9f4a93a79f",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "kamalkraj:tokenizer",
        "ref": "tokenizer",
        "sha": "20859626d568ea0958d03626fbcb51aa53c84334",
        "user": {
          "login": "kamalkraj",
          "id": 17096858,
          "node_id": "MDQ6VXNlcjE3MDk2ODU4",
          "avatar_url": "https://avatars.githubusercontent.com/u/17096858?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/kamalkraj",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1116242094,
          "node_id": "R_kgDOQoiArg",
          "name": "tunix",
          "full_name": "kamalkraj/tunix",
          "private": false,
          "owner": {
            "login": "kamalkraj",
            "id": 17096858,
            "node_id": "MDQ6VXNlcjE3MDk2ODU4",
            "avatar_url": "https://avatars.githubusercontent.com/u/17096858?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/kamalkraj",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/kamalkraj/tunix",
          "created_at": "2025-12-14T13:38:25Z",
          "updated_at": "2026-01-08T07:32:48Z",
          "pushed_at": "2026-01-08T08:25:52Z",
          "homepage": "",
          "size": 14583,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "39e1e9498f513a3ec5edde5b7eb37073ee1cb3e3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/927"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/927"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/927"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/927/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/927/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/927/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/20859626d568ea0958d03626fbcb51aa53c84334"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/921",
      "id": 3115380928,
      "node_id": "PR_kwDOOTDVN865sPDA",
      "number": 921,
      "state": "open",
      "locked": false,
      "title": "[Tunix] Remove intermediate activation sharding in FeedForward blocks.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[Tunix] Remove intermediate activation sharding in FeedForward blocks.\n",
      "created_at": "2025-12-18T21:48:32Z",
      "updated_at": "2025-12-18T21:48:34Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_846400263",
        "ref": "test_846400263",
        "sha": "d1b3dc6e0e025e0dc960180679e11caef2c6a0b6",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "123013189c09d079b0b790625d0072d8b8119d0c",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/921"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/921"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/921"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/921/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/921/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/921/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d1b3dc6e0e025e0dc960180679e11caef2c6a0b6"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/920",
      "id": 3115346544,
      "node_id": "PR_kwDOOTDVN865sGpw",
      "number": 920,
      "state": "open",
      "locked": false,
      "title": "[Tunix] Add agentic mode support to grpo_demo_llama3_qwen2.py.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[Tunix] Add agentic mode support to grpo_demo_llama3_qwen2.py.\n",
      "created_at": "2025-12-18T21:31:54Z",
      "updated_at": "2025-12-18T21:31:56Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_846394431",
        "ref": "test_846394431",
        "sha": "45eaefc4ed5acf3bd3059d54d73f202cbb025423",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "123013189c09d079b0b790625d0072d8b8119d0c",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/920"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/920"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/920"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/920/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/920/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/920/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/45eaefc4ed5acf3bd3059d54d73f202cbb025423"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/906",
      "id": 3110918301,
      "node_id": "PR_kwDOOTDVN865bNid",
      "number": 906,
      "state": "open",
      "locked": false,
      "title": "[Tunix] Reorder TPU nightly regression workflow steps.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[Tunix] Reorder TPU nightly regression workflow steps.\n",
      "created_at": "2025-12-17T18:07:28Z",
      "updated_at": "2025-12-17T18:07:29Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_845815745",
        "ref": "test_845815745",
        "sha": "14cab16da59d973ce8a0d18886f5b0d88f00588a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "7e49f40f90e3f920cbf709abeef0ce3d74b17ada",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/906"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/906"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/906"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/906/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/906/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/906/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/14cab16da59d973ce8a0d18886f5b0d88f00588a"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/903",
      "id": 3108415402,
      "node_id": "PR_kwDOOTDVN865Rqeq",
      "number": 903,
      "state": "open",
      "locked": false,
      "title": "Fix AttributeError in is_positive_integer on Python 3.11",
      "user": {
        "login": "bug39",
        "id": 90866222,
        "node_id": "MDQ6VXNlcjkwODY2MjIy",
        "avatar_url": "https://avatars.githubusercontent.com/u/90866222?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/bug39",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Remove .is_integer() call as int.is_integer() was only added in Python 3.12.\r\npyproject.toml specifies: requires-python = \">=3.11\", yet according to https://docs.python.org/3.12/library/stdtypes.html  `int.is_integer()` was only added in Python 3.12 for duck-type compatibility with `float.is_integer()\r\n\r\nResolves #\\<[902](https://github.com/google/tunix/issues/902)\\>\r\n\r\n\r\n\r\n\r\n",
      "created_at": "2025-12-17T02:39:23Z",
      "updated_at": "2026-01-08T16:21:43Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "6749ec1665b9c5c508c9e19c14e3dfb214314311",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "bug39:patch-1",
        "ref": "patch-1",
        "sha": "d8749ed71420656b6f98007115af25387adda241",
        "user": {
          "login": "bug39",
          "id": 90866222,
          "node_id": "MDQ6VXNlcjkwODY2MjIy",
          "avatar_url": "https://avatars.githubusercontent.com/u/90866222?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/bug39",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1117913951,
          "node_id": "R_kgDOQqIDXw",
          "name": "tunix",
          "full_name": "bug39/tunix",
          "private": false,
          "owner": {
            "login": "bug39",
            "id": 90866222,
            "node_id": "MDQ6VXNlcjkwODY2MjIy",
            "avatar_url": "https://avatars.githubusercontent.com/u/90866222?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/bug39",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/bug39/tunix",
          "created_at": "2025-12-17T02:07:51Z",
          "updated_at": "2025-12-19T07:30:36Z",
          "pushed_at": "2025-12-19T07:30:33Z",
          "homepage": "",
          "size": 11394,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "dc2019764d92fec822c1a6d4850b18ad49fd8520",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/903"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/903"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/903"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/903/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/903/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/903/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d8749ed71420656b6f98007115af25387adda241"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/898",
      "id": 3107555027,
      "node_id": "PR_kwDOOTDVN865OYbT",
      "number": 898,
      "state": "open",
      "locked": false,
      "title": "fix broken test.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "fix broken test.\n",
      "created_at": "2025-12-16T19:56:07Z",
      "updated_at": "2025-12-16T19:57:03Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_845374899",
        "ref": "test_845374899",
        "sha": "1646ab74cd097d5968e8fab311d9b11057ccc5be",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "ba5c799adb1ded8275c8893cd16e4b22eacf723d",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/898"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/898"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/898"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/898/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/898/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/898/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/1646ab74cd097d5968e8fab311d9b11057ccc5be"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/895",
      "id": 3106568189,
      "node_id": "PR_kwDOOTDVN865Knf9",
      "number": 895,
      "state": "open",
      "locked": false,
      "title": "Upgrade GitHub Actions to latest versions",
      "user": {
        "login": "salmanmkc",
        "id": 32169182,
        "node_id": "MDQ6VXNlcjMyMTY5MTgy",
        "avatar_url": "https://avatars.githubusercontent.com/u/32169182?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/salmanmkc",
        "type": "User",
        "user_view_type": "public",
        "site_admin": true
      },
      "body": "## Summary\n\nUpgrade GitHub Actions to their latest versions for improved features, bug fixes, and security updates.\n\n## Changes\n\n| Action | Old Version(s) | New Version | Files |\n|--------|---------------|-------------|-------|\n| `pypa/gh-action-pypi-publish` | `release/v1` | [`ed0c539`](https://github.com/pypa/gh-action-pypi-publish/commit/ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e) | workflow files |\n\n## Why upgrade?\n\nKeeping GitHub Actions up to date ensures:\n- **Security**: Latest security patches and fixes\n- **Features**: Access to new functionality and improvements\n- **Compatibility**: Better support for current GitHub features\n- **Performance**: Optimizations and efficiency improvements\n\n### Note on pypa/gh-action-pypi-publish\n\nThis action uses **branch-based versioning** (`release/v1.x`) rather than tags. The `v1` tag does not exist in this repository. \n\nThis PR pins to the SHA of `release/v1.13` for security best practices:\n```yaml\nuses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e  # release/v1.13\n```\n\n### Testing\n\nThese changes only affect CI/CD workflow configurations and should not impact application functionality.\n",
      "created_at": "2025-12-16T14:27:05Z",
      "updated_at": "2025-12-18T22:52:31Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "6ea7fb76dfb316e42d37582ad0530bd889dabab8",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "salmanmkc:upgrade-github-actions-node24-general",
        "ref": "upgrade-github-actions-node24-general",
        "sha": "9b920a742cd35a7ebe3d5c69564e21caf15a6f0a",
        "user": {
          "login": "salmanmkc",
          "id": 32169182,
          "node_id": "MDQ6VXNlcjMyMTY5MTgy",
          "avatar_url": "https://avatars.githubusercontent.com/u/32169182?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/salmanmkc",
          "type": "User",
          "user_view_type": "public",
          "site_admin": true
        },
        "repo": {
          "id": 1117589612,
          "node_id": "R_kgDOQp0QbA",
          "name": "tunix",
          "full_name": "salmanmkc/tunix",
          "private": false,
          "owner": {
            "login": "salmanmkc",
            "id": 32169182,
            "node_id": "MDQ6VXNlcjMyMTY5MTgy",
            "avatar_url": "https://avatars.githubusercontent.com/u/32169182?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/salmanmkc",
            "type": "User",
            "user_view_type": "public",
            "site_admin": true
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/salmanmkc/tunix",
          "created_at": "2025-12-16T14:26:53Z",
          "updated_at": "2026-01-23T08:48:59Z",
          "pushed_at": "2026-01-23T08:48:47Z",
          "homepage": "",
          "size": 102432,
          "stargazers_count": 1,
          "watchers_count": 1,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 1,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "123013189c09d079b0b790625d0072d8b8119d0c",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/895"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/895"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/895"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/895/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/895/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/895/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/9b920a742cd35a7ebe3d5c69564e21caf15a6f0a"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/894",
      "id": 3106567800,
      "node_id": "PR_kwDOOTDVN865KnZ4",
      "number": 894,
      "state": "open",
      "locked": false,
      "title": "Upgrade GitHub Actions for Node 24 compatibility",
      "user": {
        "login": "salmanmkc",
        "id": 32169182,
        "node_id": "MDQ6VXNlcjMyMTY5MTgy",
        "avatar_url": "https://avatars.githubusercontent.com/u/32169182?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/salmanmkc",
        "type": "User",
        "user_view_type": "public",
        "site_admin": true
      },
      "body": "## Summary\n\nUpgrade GitHub Actions to their latest versions to ensure compatibility with Node 24, as Node 20 will reach end-of-life in April 2026.\n\n## Changes\n\n| Action | Old Version(s) | New Version | Release | Files |\n|--------|---------------|-------------|---------|-------|\n| `actions/cache` | [`v4`](https://github.com/actions/cache/releases/tag/v4) | [`v5`](https://github.com/actions/cache/releases/tag/v5) | [Release](https://github.com/actions/cache/releases/tag/v5) | tpu-nightly-regression.yml, tpu-tests.yml |\n| `actions/checkout` | [`v4`](https://github.com/actions/checkout/releases/tag/v4) | [`v6`](https://github.com/actions/checkout/releases/tag/v6) | [Release](https://github.com/actions/checkout/releases/tag/v6) | cpu-tests.yml, pypi_release.yml, tpu-nightly-regression.yml, tpu-tests.yml |\n| `actions/setup-python` | [`v4`](https://github.com/actions/setup-python/releases/tag/v4), [`v5`](https://github.com/actions/setup-python/releases/tag/v5) | [`v6`](https://github.com/actions/setup-python/releases/tag/v6) | [Release](https://github.com/actions/setup-python/releases/tag/v6) | build_package.yml, cpu-tests.yml, pypi_release.yml |\n\n## Context\n\nPer [GitHub's announcement](https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/), Node 20 is being deprecated and runners will begin using Node 24 by default starting March 4th, 2026.\n\n### Why this matters\n\n- **Node 20 EOL**: April 2026\n- **Node 24 default**: March 4th, 2026\n- **Action**: Update to latest action versions that support Node 24\n\n### Security Note\n\nActions that were previously pinned to commit SHAs remain pinned to SHAs (updated to the latest release SHA) to maintain the security benefits of immutable references.\n\n### Testing\n\nThese changes only affect CI/CD workflow configurations and should not impact application functionality. The workflows should be tested by running them on a branch before merging.\n",
      "created_at": "2025-12-16T14:27:00Z",
      "updated_at": "2026-01-23T08:48:48Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "037f08018f1bda98b2f715f3b803180a6aa140c7",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "salmanmkc:upgrade-github-actions-node24",
        "ref": "upgrade-github-actions-node24",
        "sha": "6f2a10a6a3cb27ccc640d0b6ec61d906e16b7900",
        "user": {
          "login": "salmanmkc",
          "id": 32169182,
          "node_id": "MDQ6VXNlcjMyMTY5MTgy",
          "avatar_url": "https://avatars.githubusercontent.com/u/32169182?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/salmanmkc",
          "type": "User",
          "user_view_type": "public",
          "site_admin": true
        },
        "repo": {
          "id": 1117589612,
          "node_id": "R_kgDOQp0QbA",
          "name": "tunix",
          "full_name": "salmanmkc/tunix",
          "private": false,
          "owner": {
            "login": "salmanmkc",
            "id": 32169182,
            "node_id": "MDQ6VXNlcjMyMTY5MTgy",
            "avatar_url": "https://avatars.githubusercontent.com/u/32169182?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/salmanmkc",
            "type": "User",
            "user_view_type": "public",
            "site_admin": true
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/salmanmkc/tunix",
          "created_at": "2025-12-16T14:26:53Z",
          "updated_at": "2026-01-23T08:48:59Z",
          "pushed_at": "2026-01-23T08:48:47Z",
          "homepage": "",
          "size": 102432,
          "stargazers_count": 1,
          "watchers_count": 1,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 1,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "b2be96833508ae261122f7b8c3c2663943179a8f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/894"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/894"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/894"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/894/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/894/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/894/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/6f2a10a6a3cb27ccc640d0b6ec61d906e16b7900"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/892",
      "id": 3104409714,
      "node_id": "PR_kwDOOTDVN865CYhy",
      "number": 892,
      "state": "open",
      "locked": false,
      "title": "Fdpo",
      "user": {
        "login": "xinzhuo20",
        "id": 71267422,
        "node_id": "MDQ6VXNlcjcxMjY3NDIy",
        "avatar_url": "https://avatars.githubusercontent.com/u/71267422?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/xinzhuo20",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "#fDPO Implementation\r\n\r\nFine-tuning examples using Google Tunix with **fDPO** - a novel fine-grained preference learning algorithm for segment-level preference optimization.\r\n\r\n## fDPO Overview\r\n\r\nfDPO (Fine-grained Direct Preference Optimization) extends traditional DPO by introducing **segment-level preference granularity**. Instead of applying a single global trade-off parameter β uniformly across all reasoning steps, fDPO separates responses into distinct components (description and reasoning) and applies adaptive, segment-specific β values.\r\n\r\n### Key Features\r\n\r\n- **Segment-Level Optimization**: Separates responses into description (`R_desc`) and reasoning (`R_reason`) components\r\n- **Adaptive β Values**: Dynamically computes `β_desc` and `β_reason` based on preference differentials\r\n- **Balanced Learning**: Prevents overfitting to simpler descriptive responses while properly optimizing complex reasoning paths\r\n\r\n**Reference**\r\nhttps://plan-lab.github.io/projects/spatialreasoner/\r\n",
      "created_at": "2025-12-16T00:05:28Z",
      "updated_at": "2025-12-17T00:47:47Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "4368cb4774c3591bcfd3f4f17cdf20c208331488",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "xinzhuo20:fdpo",
        "ref": "fdpo",
        "sha": "e8110600e67810bee3ad3252a172aa78815e8bca",
        "user": {
          "login": "xinzhuo20",
          "id": 71267422,
          "node_id": "MDQ6VXNlcjcxMjY3NDIy",
          "avatar_url": "https://avatars.githubusercontent.com/u/71267422?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/xinzhuo20",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1117162509,
          "node_id": "R_kgDOQpaMDQ",
          "name": "tunix",
          "full_name": "xinzhuo20/tunix",
          "private": false,
          "owner": {
            "login": "xinzhuo20",
            "id": 71267422,
            "node_id": "MDQ6VXNlcjcxMjY3NDIy",
            "avatar_url": "https://avatars.githubusercontent.com/u/71267422?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/xinzhuo20",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/xinzhuo20/tunix",
          "created_at": "2025-12-15T23:22:59Z",
          "updated_at": "2025-12-15T23:22:59Z",
          "pushed_at": "2025-12-17T00:47:46Z",
          "homepage": "",
          "size": 14306,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "e8b63faa148fcac275aec0977b110c89881c73c3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/892"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/892"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/892"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/892/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/892/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/892/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/e8110600e67810bee3ad3252a172aa78815e8bca"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/885",
      "id": 3099967933,
      "node_id": "PR_kwDOOTDVN864xcG9",
      "number": 885,
      "state": "open",
      "locked": false,
      "title": "Add metrics support to CheckpointManager and PeftTrainer",
      "user": {
        "login": "kamalkraj",
        "id": 17096858,
        "node_id": "MDQ6VXNlcjE3MDk2ODU4",
        "avatar_url": "https://avatars.githubusercontent.com/u/17096858?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kamalkraj",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Enhance the CheckpointManager to support saving metrics alongside model checkpoints. Introduce a method in MetricsLogger to retrieve the latest metrics and integrate metrics logging during training and evaluation steps in PeftTrainer. This improves the tracking of model performance over time.\r\n\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-12-14T14:52:51Z",
      "updated_at": "2025-12-20T07:31:55Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "kamalkraj:checkpoint",
        "ref": "checkpoint",
        "sha": "664e79a3ade4ba51a9492fd00178461ce8247e82",
        "user": {
          "login": "kamalkraj",
          "id": 17096858,
          "node_id": "MDQ6VXNlcjE3MDk2ODU4",
          "avatar_url": "https://avatars.githubusercontent.com/u/17096858?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/kamalkraj",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1116242094,
          "node_id": "R_kgDOQoiArg",
          "name": "tunix",
          "full_name": "kamalkraj/tunix",
          "private": false,
          "owner": {
            "login": "kamalkraj",
            "id": 17096858,
            "node_id": "MDQ6VXNlcjE3MDk2ODU4",
            "avatar_url": "https://avatars.githubusercontent.com/u/17096858?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/kamalkraj",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/kamalkraj/tunix",
          "created_at": "2025-12-14T13:38:25Z",
          "updated_at": "2026-01-08T07:32:48Z",
          "pushed_at": "2026-01-08T08:25:52Z",
          "homepage": "",
          "size": 14583,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "39e1e9498f513a3ec5edde5b7eb37073ee1cb3e3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/885"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/885"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/885"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/885/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/885/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/885/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/664e79a3ade4ba51a9492fd00178461ce8247e82"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/871",
      "id": 3088498971,
      "node_id": "PR_kwDOOTDVN864FsEb",
      "number": 871,
      "state": "open",
      "locked": false,
      "title": "Add Qwen3 235B-A22B model config",
      "user": {
        "login": "yhtang",
        "id": 6081524,
        "node_id": "MDQ6VXNlcjYwODE1MjQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/6081524?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/yhtang",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add model config for the Qwen3-235B-A22B MoE model. This is implemented as a new `qwen3_235b_a22b` classmethod on `tunix.models.qwen3.model.ModelConfig`, modeled after the existing `qwen3_30b` classmethod and parameterized from the upstream HF config.\r\n\r\n**Reference**\r\n\r\nThe [raw specs from HF](https://huggingface.co/Qwen/Qwen3-235B-A22B/raw/main/config.json) are:\r\n```\r\n{\r\n  \"architectures\": [\r\n    \"Qwen3MoeForCausalLM\"\r\n  ],\r\n  \"attention_bias\": false,\r\n  \"attention_dropout\": 0.0,\r\n  \"bos_token_id\": 151643,\r\n  \"decoder_sparse_step\": 1,\r\n  \"eos_token_id\": 151645,\r\n  \"head_dim\": 128,\r\n  \"hidden_act\": \"silu\",\r\n  \"hidden_size\": 4096,\r\n  \"initializer_range\": 0.02,\r\n  \"intermediate_size\": 12288,\r\n  \"max_position_embeddings\": 40960,\r\n  \"max_window_layers\": 94,\r\n  \"mlp_only_layers\": [],\r\n  \"model_type\": \"qwen3_moe\",\r\n  \"moe_intermediate_size\": 1536,\r\n  \"norm_topk_prob\": true,\r\n  \"num_attention_heads\": 64,\r\n  \"num_experts\": 128,\r\n  \"num_experts_per_tok\": 8,\r\n  \"num_hidden_layers\": 94,\r\n  \"num_key_value_heads\": 4,\r\n  \"output_router_logits\": false,\r\n  \"rms_norm_eps\": 1e-06,\r\n  \"rope_scaling\": null,\r\n  \"rope_theta\": 1000000.0,\r\n  \"router_aux_loss_coef\": 0.001,\r\n  \"sliding_window\": null,\r\n  \"tie_word_embeddings\": false,\r\n  \"torch_dtype\": \"bfloat16\",\r\n  \"transformers_version\": \"4.51.0\",\r\n  \"use_cache\": true,\r\n  \"use_sliding_window\": false,\r\n  \"vocab_size\": 151936\r\n}\r\n```\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-12-10T08:55:08Z",
      "updated_at": "2025-12-19T00:41:45Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "8dc1f55ecfa6423488ab70bea620df4da9f97617",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:yhtang/add-qwen3-235b",
        "ref": "yhtang/add-qwen3-235b",
        "sha": "461aa86d56cd8cd6fc646054f639a5f2044b57a3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f394dd8119ef41c4185bce3d32bcd170074f0963",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/871"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/871"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/871"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/871/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/871/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/871/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/461aa86d56cd8cd6fc646054f639a5f2044b57a3"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/849",
      "id": 3076552157,
      "node_id": "PR_kwDOOTDVN863YHXd",
      "number": 849,
      "state": "open",
      "locked": false,
      "title": "Update sharding for activations to include 'dp' axis. Validated on internal notebook, after enabling (2, 1, 4) for (dp, fsdp, tp), do see weights replicated on dp axis.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Update sharding for activations to include 'dp' axis. Validated on internal notebook, after enabling (2, 1, 4) for (dp, fsdp, tp), do see weights replicated on dp axis.\n",
      "created_at": "2025-12-05T22:07:53Z",
      "updated_at": "2025-12-05T22:07:54Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_833604240",
        "ref": "test_833604240",
        "sha": "935c88d25e8ae6d28deca9f852c6c9ee944c67ab",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "3e605d8077cbd4e0a0721a54e0f5f0be0b953fcd",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/849"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/849"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/849"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/849/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/849/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/849/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/935c88d25e8ae6d28deca9f852c6c9ee944c67ab"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/838",
      "id": 3072588753,
      "node_id": "PR_kwDOOTDVN863I_vR",
      "number": 838,
      "state": "open",
      "locked": false,
      "title": "Explicitly cast `input_ids` to `jnp.int32`",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Explicitly cast `input_ids` to `jnp.int32`\n",
      "created_at": "2025-12-04T18:46:56Z",
      "updated_at": "2025-12-04T20:13:51Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "d85595a80bc281f1245b1b95339cce739019bad7",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_840309414",
        "ref": "test_840309414",
        "sha": "0f55b7655572cfb7067afb098ec14e0569fb0e51",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "0a39687467904682e6f19bd8ad3e6c7ffceee00b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/838"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/838"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/838"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/838/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/838/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/838/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/0f55b7655572cfb7067afb098ec14e0569fb0e51"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/834",
      "id": 3068905630,
      "node_id": "PR_kwDOOTDVN86268ie",
      "number": 834,
      "state": "open",
      "locked": false,
      "title": "Enable multi-process/multi-controller support for GPUs",
      "user": {
        "login": "yhtang",
        "id": 6081524,
        "node_id": "MDQ6VXNlcjYwODE1MjQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/6081524?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/yhtang",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Supports #705 and #706\r\nFixes #698 \r\n\r\n**Overview**\r\n\r\nThis PR enables Tunix GRPO training to run in multi-controller mode on GPUs, where multiple processes join the same `jax.distributed.initialize` session with each controlling distinct GPUs.\r\n\r\n**Background**\r\n\r\nRunning multi-controller on GPUs (e.g., 2 processes × N GPU each) previously failed with:\r\n- `AssertionError` when iterating over non-fully-addressable arrays\r\n- `ValueError: device_put's first argument must be a fully addressable array`\r\n\r\n**Changes**\r\n\r\n1. `tunix/generate/sampler.py`\r\n  - Decode strings from local shards (`addressable_shards`) instead of iterating over global arrays\r\n  - Maintains DP sharding: each process decodes only its local batch slice\r\n  - Fallback to `device_get` for single-controller/fully-addressable cases\r\n2. `tunix/sft/peft_trainer.py`\r\n  - Updated `_shard_input` to handle global JAX arrays from rollout\r\n  - Use `jax.device_put(x, target_sharding)` for cross-mesh resharding instead of `make_array_from_process_local_data`\r\n  - Preserves existing behavior for NumPy/local arrays\r\n\r\n**Status**\r\n\r\nThis PR should be considered as a proof-of-concept that demonstrates multi-controller GRPO on GPU. Please provide any feedback and comments on how it interacts with the existing workflow for TPU/Pathways.\r\n\r\nFurther optimization is needed for efficient multi-GPU scaling, as my preliminary experiments indicates near-flat strong scaling timing.\r\n\r\n**Testing**\r\n\r\nThe following gist provides a minimal GRPO pipeline and associated run script for testing multi-process GPU runs: https://gist.github.com/yhtang/95ed9cbb6068a545aef2976fd73aab64\r\n\r\n**Reference**\r\n#705 \r\n#706 \r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [ ] I have added all the necessary unit tests for my change.\r\n- [ ] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-12-03T20:56:46Z",
      "updated_at": "2025-12-11T10:05:49Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": true,
      "head": {
        "label": "google:yhtang/multi-controller",
        "ref": "yhtang/multi-controller",
        "sha": "189226faa54c6e36c44f303d2852f58d21e8f5d3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "edae7c975d519edf185a3822b9d74b2c431f39d1",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/834"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/834"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/834"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/834/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/834/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/834/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/189226faa54c6e36c44f303d2852f58d21e8f5d3"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        7,
        6,
        698
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/833",
      "id": 3068757926,
      "node_id": "PR_kwDOOTDVN8626Yem",
      "number": 833,
      "state": "open",
      "locked": false,
      "title": "Add parity test for Agentic GRPO vs GRPO.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add parity test for Agentic GRPO vs GRPO.\n",
      "created_at": "2025-12-03T20:04:54Z",
      "updated_at": "2026-01-23T08:39:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "3949f5988a9f3ac6dd18831804d095a7608e7166",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_839855921",
        "ref": "test_839855921",
        "sha": "d81bc326b1b2717283a089715ba01bab36b61278",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "b2be96833508ae261122f7b8c3c2663943179a8f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/833"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/833"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/833"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/833/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/833/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/833/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d81bc326b1b2717283a089715ba01bab36b61278"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/830",
      "id": 3065531308,
      "node_id": "PR_kwDOOTDVN862uEus",
      "number": 830,
      "state": "open",
      "locked": false,
      "title": "Remove excessive logs from OSS notebooks.",
      "user": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "The notebook sizes are bloated to tens of MBs from KBs. This PR removes the excessive outputs from the notebook and the size now goes back to normal.\r\n\r\n<!--- Describe your changes in detail. -->\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-12-03T01:10:44Z",
      "updated_at": "2025-12-03T01:15:53Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:lance-format",
        "ref": "lance-format",
        "sha": "66132e36a06f91da90124c5a2ac70214b834f9e0",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "5af3ed815e9cbc54f92ca4a123e0e02d2ba3a7f8",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/830"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/830"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/830"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/830/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/830/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/830/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/66132e36a06f91da90124c5a2ac70214b834f9e0"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/821",
      "id": 3061028370,
      "node_id": "PR_kwDOOTDVN862c5YS",
      "number": 821,
      "state": "open",
      "locked": false,
      "title": "Support custom MaxText (vLLM) models in sampler and rollout.",
      "user": {
        "login": "gagika",
        "id": 38229354,
        "node_id": "MDQ6VXNlcjM4MjI5MzU0",
        "avatar_url": "https://avatars.githubusercontent.com/u/38229354?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/gagika",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Enables direct weight synchronization and configuration for custom MaxText models within the vLLM sampler and rollout workers. This allows users to supply a `maxtext_config` via `additional_config` without needing explicit key mappings.\r\n\r\nResolves #\\<issue_number_goes_here\\>\r\n\r\n> It's a good idea to open an issue first for discussion.\r\n\r\n<!--- Describe your changes in detail. -->\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [ ] I have added all the necessary unit tests for my change.\r\n- [ ] I have verified that my change does not break existing code and all unit tests pass.\r\n- [ ] I have added all appropriate doc-strings/documentation.\r\n- [ ] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [ ] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [ ] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-12-01T21:39:18Z",
      "updated_at": "2025-12-01T21:39:18Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": true,
      "head": {
        "label": "google:gagik-maxtext-vllm",
        "ref": "gagik-maxtext-vllm",
        "sha": "f6213d89329f713eea9dac892b87819b4fec682b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "480d94659c04658671d5ede8e1bd26c052ff127e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/821"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/821"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/821"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/821/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/821/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/821/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/f6213d89329f713eea9dac892b87819b4fec682b"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/820",
      "id": 3060824150,
      "node_id": "PR_kwDOOTDVN862cHhW",
      "number": 820,
      "state": "open",
      "locked": false,
      "title": "Add GRPO micro-batch size validation to prevent incorrect grouping and advantage computation",
      "user": {
        "login": "aaghaazkhan",
        "id": 177999751,
        "node_id": "U_kgDOCpwPhw",
        "avatar_url": "https://avatars.githubusercontent.com/u/177999751?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aaghaazkhan",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "## Summary\r\n\r\nThis PR fixes issue #816 by adding a defensive validation to ensure GRPO's required grouping\r\ninvariants are not silently violated during rollout or log-probability\r\ncomputation.\r\n\r\nGRPO requires that for each prompt, the policy generates `G` completions\r\n(`num_generations`). These `G` completions must stay grouped together\r\nthroughout rollout, reward computation, and log-prob computation.\r\n\r\nIf the configured micro-batch sizes are smaller than `num_generations`,\r\nthe framework silently reshapes rewards/logprobs incorrectly, mixing\r\ngenerations from different prompts. This leads to invalid advantage\r\ncomputations and results in the model failing to learn (e.g., 0%\r\naccuracy for all metrics).\r\n\r\nThis PR introduces explicit validation checks to stop training early if\r\nincorrect batching configurations are used.\r\n\r\n---\r\n\r\n## What This Fix Does\r\n\r\n### Adds two safety checks:\r\n\r\n1. Validate that rollout micro-batch size is large enough:\r\n```python\r\nif self._rollout_micro_batch_size < self.algo_config.num_generations:\r\n    raise ValueError(...)\r\n```\r\n\r\n2. Validate that log-prob computation micro-batch size is also large enough:\r\n```python\r\nif self._compute_logps_micro_batch_size < self.algo_config.num_generations:\r\n    raise ValueError(...)\r\n```\r\n\r\nThese checks prevent GRPO from running with invalid batching\r\nconfiguration that silently corrupts reward grouping.\r\n\r\n## Why This Matters\r\n\r\n### Without these checks:\r\n\r\n- Batches are split incorrectly\r\n- Rewards are grouped incorrectly\r\n- Advantages are computed with wrong (prompt, generation) alignment\r\n- Training converges to 0 accuracy even for simple tasks\r\n- Debugging is very difficult because failure is something very unexpected\r\n\r\nWith this fix, the error is explicit, descriptive, and actionable.\r\n\r\n---\r\n\r\n## Checklist:\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-12-01T20:36:28Z",
      "updated_at": "2025-12-13T15:03:53Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "abe973e1a3e6d329a83e69d72babf73fa3ff26e8",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "aaghaazkhan:fix-grpo-microbatch",
        "ref": "fix-grpo-microbatch",
        "sha": "d2227af3abe5c8aeb11603c719302540c7826771",
        "user": {
          "login": "aaghaazkhan",
          "id": 177999751,
          "node_id": "U_kgDOCpwPhw",
          "avatar_url": "https://avatars.githubusercontent.com/u/177999751?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/aaghaazkhan",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1107923506,
          "node_id": "R_kgDOQgmSMg",
          "name": "tunix",
          "full_name": "aaghaazkhan/tunix",
          "private": false,
          "owner": {
            "login": "aaghaazkhan",
            "id": 177999751,
            "node_id": "U_kgDOCpwPhw",
            "avatar_url": "https://avatars.githubusercontent.com/u/177999751?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/aaghaazkhan",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/aaghaazkhan/tunix",
          "created_at": "2025-12-01T19:38:56Z",
          "updated_at": "2025-12-01T19:38:56Z",
          "pushed_at": "2025-12-01T20:22:09Z",
          "homepage": "",
          "size": 11182,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "480d94659c04658671d5ede8e1bd26c052ff127e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/820"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/820"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/820"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/820/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/820/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/820/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d2227af3abe5c8aeb11603c719302540c7826771"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        8
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/812",
      "id": 3055320171,
      "node_id": "PR_kwDOOTDVN862HHxr",
      "number": 812,
      "state": "open",
      "locked": false,
      "title": "Add fixed basic inference example using Sampler with dummy Gemma model",
      "user": {
        "login": "Prasanth-ADS",
        "id": 178168493,
        "node_id": "U_kgDOCp6irQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/178168493?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Prasanth-ADS",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "<html>\r\n<body>\r\n<!--StartFragment--><h2 data-start=\"297\" data-end=\"316\"><strong data-start=\"302\" data-end=\"316\">PR Summary</strong></h2>\r\n<blockquote data-start=\"317\" data-end=\"477\">\r\n<p data-start=\"319\" data-end=\"477\"><em data-start=\"322\" data-end=\"477\">This pull request introduces a fully working &amp; beginner-friendly inference example for Tunix — resolving the errors caused by outdated example notebooks.</em></p>\r\n</blockquote>\r\n<hr data-start=\"479\" data-end=\"482\">\r\n<h2 data-start=\"484\" data-end=\"512\"> <strong data-start=\"490\" data-end=\"512\">What This PR Fixes</strong></h2>\r\n<p data-start=\"513\" data-end=\"780\"> Previous inference examples depended on non-existent functions such as <code data-start=\"586\" data-end=\"596\">sample()</code><br data-start=\"596\" data-end=\"599\">\r\n Users frequently ran into <code data-start=\"627\" data-end=\"640\">ImportError</code>, tokenizer loading failures &amp; missing model loading steps<br data-start=\"698\" data-end=\"701\">\r\n No end-to-end example worked <strong data-start=\"732\" data-end=\"780\">without requiring pretrained model downloads</strong></p>\r\n<hr data-start=\"782\" data-end=\"785\">\r\n<h2 data-start=\"787\" data-end=\"814\"> <strong data-start=\"793\" data-end=\"814\">What This PR Adds</strong></h2>\r\n<h3 data-start=\"815\" data-end=\"852\"> Full Running Inference Example</h3>\r\n<ul data-start=\"853\" data-end=\"1132\">\r\n<li data-start=\"853\" data-end=\"899\">\r\n<p data-start=\"855\" data-end=\"899\">Basic notebook <strong data-start=\"870\" data-end=\"877\">and</strong> Python script version</p>\r\n</li>\r\n<li data-start=\"900\" data-end=\"971\">\r\n<p data-start=\"902\" data-end=\"971\"><strong data-start=\"902\" data-end=\"919\">Works locally</strong>, using <code data-start=\"927\" data-end=\"948\">dummy_model_creator</code> + Gemma model config</p>\r\n</li>\r\n<li data-start=\"972\" data-end=\"1041\">\r\n<p data-start=\"974\" data-end=\"1041\"><strong data-start=\"974\" data-end=\"1007\">Sampler correctly initialized</strong> with dummy model + cache config</p>\r\n</li>\r\n<li data-start=\"1042\" data-end=\"1132\">\r\n<p data-start=\"1044\" data-end=\"1132\">Tokenizer now <strong data-start=\"1058\" data-end=\"1092\">falls back to a mock tokenizer</strong> if a real tokenizer path is unavailable</p>\r\n</li>\r\n</ul>\r\n<h3 data-start=\"1134\" data-end=\"1165\"> Better UX for Developers</h3>\r\n<ul data-start=\"1166\" data-end=\"1389\">\r\n<li data-start=\"1166\" data-end=\"1219\">\r\n<p data-start=\"1168\" data-end=\"1219\">Handles missing dependencies with readable warnings</p>\r\n</li>\r\n<li data-start=\"1220\" data-end=\"1259\">\r\n<p data-start=\"1222\" data-end=\"1259\">Supports <strong data-start=\"1231\" data-end=\"1259\">multiple prompts at once</strong></p>\r\n</li>\r\n<li data-start=\"1260\" data-end=\"1320\">\r\n<p data-start=\"1262\" data-end=\"1320\"><strong data-start=\"1262\" data-end=\"1286\">Clear printed output</strong> with both prompt &amp; generated text</p>\r\n</li>\r\n<li data-start=\"1321\" data-end=\"1389\">\r\n<p data-start=\"1323\" data-end=\"1389\">Eliminates confusion for new contributors &amp; first-time Tunix users</p>\r\n</li>\r\n</ul>\r\n<hr data-start=\"1391\" data-end=\"1394\">\r\n<h2 data-start=\"1396\" data-end=\"1412\"> <strong data-start=\"1402\" data-end=\"1412\">Impact</strong></h2>\r\n<p data-start=\"1413\" data-end=\"1679\"> This PR dramatically <strong data-start=\"1437\" data-end=\"1460\">improves onboarding</strong> for both contributors and researchers<br data-start=\"1498\" data-end=\"1501\">\r\n🔹 New users can now <strong data-start=\"1522\" data-end=\"1551\">run inference immediately</strong> without needing model download or TPU/GPU<br data-start=\"1593\" data-end=\"1596\">\r\n🔹 Becomes a <strong data-start=\"1609\" data-end=\"1637\">reference implementation</strong> for future inference examples &amp; tutorials</p>\r\n<hr data-start=\"1681\" data-end=\"1684\">\r\n<h2 data-start=\"1686\" data-end=\"1710\"> <strong data-start=\"1692\" data-end=\"1710\">Included Files</strong></h2>\r\n<div class=\"_tableContainer_1rjym_1\"><div tabindex=\"-1\" class=\"group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse\">\r\nType | File\r\n-- | --\r\nNotebook | examples/01_basic_inference_example.ipynb\r\nPython Script | examples/01_basic_inference_example_fixed.py\r\nSupport | Tokenizer fallback + dummy model usage\r\n\r\n</div></div>\r\n<hr data-start=\"1923\" data-end=\"1926\">\r\n<h2 data-start=\"1928\" data-end=\"1953\"> <strong data-start=\"1934\" data-end=\"1953\">Reproducibility</strong></h2>\r\n<p data-start=\"1954\" data-end=\"1987\">No external downloads required.</p>\r\n<blockquote data-start=\"1988\" data-end=\"2072\">\r\n<p data-start=\"1990\" data-end=\"2072\"><code data-start=\"1990\" data-end=\"2043\">python examples/01_basic_inference_example_fixed.py</code><br data-start=\"2043\" data-end=\"2046\">\r\nworks in CPU-only systems.</p>\r\n</blockquote>\r\n<hr data-start=\"2074\" data-end=\"2077\">\r\n<h2 data-start=\"2079\" data-end=\"2100\"> <strong data-start=\"2085\" data-end=\"2100\">PR Metadata</strong></h2>\r\n<ul class=\"contains-task-list\" data-start=\"2101\" data-end=\"2250\">\r\n<li class=\"task-list-item\" data-start=\"2101\" data-end=\"2140\">\r\n<p data-start=\"2107\" data-end=\"2140\"><input disabled=\"\" type=\"checkbox\" checked=\"\"> Follows contribution guidelines</p>\r\n</li>\r\n<li class=\"task-list-item\" data-start=\"2141\" data-end=\"2177\">\r\n<p data-start=\"2147\" data-end=\"2177\"><input disabled=\"\" type=\"checkbox\" checked=\"\"> Does not break existing code</p>\r\n</li>\r\n<li class=\"task-list-item\" data-start=\"2178\" data-end=\"2224\">\r\n<p data-start=\"2184\" data-end=\"2224\"><input disabled=\"\" type=\"checkbox\" checked=\"\"> Adds documentation explaining behavior</p>\r\n</li>\r\n<li class=\"task-list-item\" data-start=\"2225\" data-end=\"2250\">\r\n<p data-start=\"2231\" data-end=\"2250\"><input disabled=\"\" type=\"checkbox\" checked=\"\"> Signed Google CLA</p>\r\n</li>\r\n</ul>\r\n<hr data-start=\"2252\" data-end=\"2255\">\r\n<h3 data-start=\"2257\" data-end=\"2288\"> <strong data-start=\"2264\" data-end=\"2288\">Future Opportunities</strong></h3>\r\n<blockquote data-start=\"2289\" data-end=\"2337\">\r\n<p data-start=\"2291\" data-end=\"2337\">This example can later be extended to support:</p>\r\n</blockquote>\r\n<ul data-start=\"2338\" data-end=\"2437\">\r\n<li data-start=\"2338\" data-end=\"2370\">\r\n<p data-start=\"2340\" data-end=\"2370\">Beam search comparison plots</p>\r\n</li>\r\n<li data-start=\"2371\" data-end=\"2403\">\r\n<p data-start=\"2373\" data-end=\"2403\">Reasoning step visualization</p>\r\n</li>\r\n<li data-start=\"2404\" data-end=\"2437\">\r\n<p data-start=\"2406\" data-end=\"2437\">Reward-based generation demos</p>\r\n</li>\r\n</ul>\r\n<hr data-start=\"2439\" data-end=\"2442\">\r\n<h3 data-start=\"2444\" data-end=\"2461\"> Final Note</h3>\r\n<p data-start=\"2462\" data-end=\"2629\"><em data-start=\"2464\" data-end=\"2629\">This PR meaningfully improves the usability of Tunix by giving new developers something that works out-of-the-box — no configuration headaches, no silent failures.</em></p><!--EndFragment-->\r\n</body>\r\n</html>\r\n\r\n@google-cla I signed it!\r\n",
      "created_at": "2025-11-29T05:27:58Z",
      "updated_at": "2025-11-29T05:48:01Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "0faf5ef2fb5afa66b927b245d49e6d07e2b61bd0",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "Prasanth-ADS:add-fixed-basic-inference-example",
        "ref": "add-fixed-basic-inference-example",
        "sha": "8d63d4ccf85b66100e2be97ded18f5147d50ff89",
        "user": {
          "login": "Prasanth-ADS",
          "id": 178168493,
          "node_id": "U_kgDOCp6irQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/178168493?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Prasanth-ADS",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1106364639,
          "node_id": "R_kgDOQfHI3w",
          "name": "tunix",
          "full_name": "Prasanth-ADS/tunix",
          "private": false,
          "owner": {
            "login": "Prasanth-ADS",
            "id": 178168493,
            "node_id": "U_kgDOCp6irQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/178168493?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/Prasanth-ADS",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/Prasanth-ADS/tunix",
          "created_at": "2025-11-29T05:17:43Z",
          "updated_at": "2026-02-09T03:45:27Z",
          "pushed_at": "2025-11-29T05:45:50Z",
          "homepage": "",
          "size": 22581,
          "stargazers_count": 1,
          "watchers_count": 1,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 1,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "57522f6a346043be7be53190350870621346cb78",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/812"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/812"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/812"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/812/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/812/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/812/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/8d63d4ccf85b66100e2be97ded18f5147d50ff89"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/800",
      "id": 3042705906,
      "node_id": "PR_kwDOOTDVN861XAHy",
      "number": 800,
      "state": "open",
      "locked": false,
      "title": "Minor Doc Fixes: Correct a typo, add a hyperlink and sequential alignment of contribution steps in documentation.",
      "user": {
        "login": "rajasekharporeddy",
        "id": 153593711,
        "node_id": "U_kgDOCSenbw",
        "avatar_url": "https://avatars.githubusercontent.com/u/153593711?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/rajasekharporeddy",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR:\r\n- Corrected a Typo in the `clear_jit_cache` method of `PeftTrainer` in `peft_trainer.py` file,\r\n- Corrected the contribution steps in `CONTRIBUTING.md` to ensure correct sequential alignment\r\n- Added a hyperlink to the original GRPO paper in the description of the arguments of `GRPOConfig` in the `grpo_learner.py` file for easy reference and attribution.",
      "created_at": "2025-11-25T08:05:02Z",
      "updated_at": "2026-01-22T16:21:55Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "rajasekharporeddy:broken_links",
        "ref": "broken_links",
        "sha": "f49b13a845db70aafe7ac74b5b86320274ee066f",
        "user": {
          "login": "rajasekharporeddy",
          "id": 153593711,
          "node_id": "U_kgDOCSenbw",
          "avatar_url": "https://avatars.githubusercontent.com/u/153593711?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/rajasekharporeddy",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1095460342,
          "node_id": "R_kgDOQUtl9g",
          "name": "tunix",
          "full_name": "rajasekharporeddy/tunix",
          "private": false,
          "owner": {
            "login": "rajasekharporeddy",
            "id": 153593711,
            "node_id": "U_kgDOCSenbw",
            "avatar_url": "https://avatars.githubusercontent.com/u/153593711?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/rajasekharporeddy",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/rajasekharporeddy/tunix",
          "created_at": "2025-11-13T04:40:39Z",
          "updated_at": "2026-02-13T07:10:58Z",
          "pushed_at": "2026-02-13T07:17:02Z",
          "homepage": "",
          "size": 32978,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "26d5f9024c6c43b9f142aab16a09998f740d7ab0",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/800"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/800"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/800"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/800/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/800/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/800/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/f49b13a845db70aafe7ac74b5b86320274ee066f"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/793",
      "id": 3042050710,
      "node_id": "PR_kwDOOTDVN861UgKW",
      "number": 793,
      "state": "open",
      "locked": false,
      "title": "Support instruction tuned gemma3",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Support instruction tuned gemma3\n",
      "created_at": "2025-11-25T01:46:49Z",
      "updated_at": "2025-11-25T01:46:50Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_836423592",
        "ref": "test_836423592",
        "sha": "0b84a4371787388a273aff6302123098a1ea39c3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "096080ffbb6529353b8e0897142bc425ed57fb3b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/793"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/793"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/793"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/793/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/793/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/793/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/0b84a4371787388a273aff6302123098a1ea39c3"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/764",
      "id": 3023078910,
      "node_id": "PR_kwDOOTDVN860MIX-",
      "number": 764,
      "state": "open",
      "locked": false,
      "title": "Add timing logs to `transfer_state`.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add timing logs to `transfer_state`.\n",
      "created_at": "2025-11-18T18:59:35Z",
      "updated_at": "2025-11-18T18:59:36Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_833882518",
        "ref": "test_833882518",
        "sha": "d60b8237254cb161a72ae90af39647233bd597c3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "783b1e7447accd902e8631d6c400ae36bc63f88a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/764"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/764"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/764"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/764/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/764/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/764/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d60b8237254cb161a72ae90af39647233bd597c3"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/756",
      "id": 3018595694,
      "node_id": "PR_kwDOOTDVN86z7B1u",
      "number": 756,
      "state": "open",
      "locked": false,
      "title": "Only load from GCS for GCS paths",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Only load from GCS for GCS paths\n",
      "created_at": "2025-11-17T18:42:11Z",
      "updated_at": "2025-11-17T18:42:12Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_833401244",
        "ref": "test_833401244",
        "sha": "40b62a1acefc2ef8d8b4c7223674d5137d2f5703",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "31fbc3a236b51b617a10db14937ca866bb692469",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/756"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/756"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/756"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/756/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/756/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/756/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/40b62a1acefc2ef8d8b4c7223674d5137d2f5703"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/748",
      "id": 3014658968,
      "node_id": "PR_kwDOOTDVN86zsAuY",
      "number": 748,
      "state": "open",
      "locked": false,
      "title": "Colab & Kaggle Badges",
      "user": {
        "login": "msghik",
        "id": 8482697,
        "node_id": "MDQ6VXNlcjg0ODI2OTc=",
        "avatar_url": "https://avatars.githubusercontent.com/u/8482697?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/msghik",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "#  Summary\r\n\r\nThis Pull Request improves the accessibility and user experience of our example notebooks by adding **Run in Colab** and **Run in Kaggle** badges. Users can now open and run the notebooks directly on their preferred cloud platform with a single click, reducing setup friction.\r\n\r\n---\r\n\r\n#  Changes\r\n\r\nUpdated **6 notebooks** in the `examples/` directory with consistent platform badges.\r\n\r\n## Main Examples\r\n- **`qlora_gemma.ipynb`**  \r\n  ➤ Added **Colab** and **Kaggle** badges  \r\n- **`dpo_gemma.ipynb`**  \r\n  ➤ Added **Colab** and **Kaggle** badges  \r\n- **`grpo_gemma.ipynb`**  \r\n  ➤ Added **Colab** and **Kaggle** badges  \r\n- **`logit_distillation.ipynb`**  \r\n  ➤ Added **Colab** badge (Kaggle badge already existed)\r\n\r\n## Model Loading Examples\r\n- **`gemma3_model_load.ipynb`**  \r\n  ➤ Added notebook title + **Colab**, **Kaggle**, and **GitHub** badges  \r\n- **`gemma2_model_load.ipynb`**  \r\n  ➤ Added notebook title + **Colab**, **Kaggle**, and **GitHub** badges  \r\n\r\nAll badges were verified to link correctly to their respective notebook paths.\r\n\r\n---\r\n\r\n# Benefits\r\n\r\n### Improved Accessibility\r\nUsers can launch notebooks instantly on Colab or Kaggle without needing any local setup.\r\n\r\n### Enhanced User Experience\r\nReduces friction and speeds up experimentation with Tunix.\r\n\r\n### Standardization\r\nAdopts a consistent badge layout across all example notebooks, matching the style used in standard Google ML tutorial notebooks.\r\n",
      "created_at": "2025-11-16T06:13:25Z",
      "updated_at": "2025-12-19T17:51:28Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "msghik:colab_badge",
        "ref": "colab_badge",
        "sha": "74735a715c0f411eefa50238e2e8513cb2f51f94",
        "user": {
          "login": "msghik",
          "id": 8482697,
          "node_id": "MDQ6VXNlcjg0ODI2OTc=",
          "avatar_url": "https://avatars.githubusercontent.com/u/8482697?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/msghik",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1095502476,
          "node_id": "R_kgDOQUwKjA",
          "name": "tunix",
          "full_name": "msghik/tunix",
          "private": false,
          "owner": {
            "login": "msghik",
            "id": 8482697,
            "node_id": "MDQ6VXNlcjg0ODI2OTc=",
            "avatar_url": "https://avatars.githubusercontent.com/u/8482697?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/msghik",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/msghik/tunix",
          "created_at": "2025-11-13T06:14:17Z",
          "updated_at": "2025-11-16T06:08:42Z",
          "pushed_at": "2025-11-16T06:08:37Z",
          "homepage": "",
          "size": 20413,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "9d014d7f1e78b1c80f5d5e782c545975b19390f8",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/748"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/748"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/748"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/748/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/748/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/748/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/74735a715c0f411eefa50238e2e8513cb2f51f94"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/747",
      "id": 3013148596,
      "node_id": "PR_kwDOOTDVN86zmP-0",
      "number": 747,
      "state": "open",
      "locked": false,
      "title": "Rename build_and_test_tunix.yml to build_andtest_tunix.yml",
      "user": {
        "login": "Tsukimarf",
        "id": 215229009,
        "node_id": "U_kgDODNQiUQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Tsukimarf",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "`git mv .github/workflows/build_and_test_tunix.yml .github/workflows/build_andtest_tunix.yml\r\ngit commit -m \"Rename workflow file to build_andtest_tunix.yml\"\r\ngit push`\r\n",
      "created_at": "2025-11-15T07:58:57Z",
      "updated_at": "2025-11-18T06:24:46Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "70c1306e542dc1dedc0512b388e53f08f6aebe80",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "Tsukimarf:Tsukimarf-patch-1",
        "ref": "Tsukimarf-patch-1",
        "sha": "fed2c00b93ce8b482522c5fb1faad68a8965fa1b",
        "user": {
          "login": "Tsukimarf",
          "id": 215229009,
          "node_id": "U_kgDODNQiUQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Tsukimarf",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068599224,
          "node_id": "R_kgDOP7GHuA",
          "name": "tunix",
          "full_name": "Tsukimarf/tunix",
          "private": false,
          "owner": {
            "login": "Tsukimarf",
            "id": 215229009,
            "node_id": "U_kgDODNQiUQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/Tsukimarf",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/Tsukimarf/tunix",
          "created_at": "2025-10-02T16:13:58Z",
          "updated_at": "2025-12-06T10:22:19Z",
          "pushed_at": "2025-12-06T10:22:01Z",
          "homepage": "https://tunix-five.vercel.app",
          "size": 14255,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 2,
          "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="
          },
          "allow_forking": true,
          "is_template": true,
          "web_commit_signoff_required": true,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 2,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:v0.1",
        "ref": "v0.1",
        "sha": "72d00a897e51ae1177e4c100c867930151d08821",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/747"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/747"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/747"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/747/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/747/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/747/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/fed2c00b93ce8b482522c5fb1faad68a8965fa1b"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/729",
      "id": 3005445121,
      "node_id": "PR_kwDOOTDVN86zI3QB",
      "number": 729,
      "state": "open",
      "locked": false,
      "title": "Speed up tpu-tests",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Speed up tpu-tests\n",
      "created_at": "2025-11-13T05:27:42Z",
      "updated_at": "2025-11-13T05:27:44Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "7c4937c1046c36c4dbdbf496b76429d8a957739c",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_831679303",
        "ref": "test_831679303",
        "sha": "491ff062faa1946168212489ebde20881e4fe084",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "0d13d001d0b8fd05c3172b7aa64902ed8531fb96",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/729"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/729"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/729"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/729/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/729/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/729/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/491ff062faa1946168212489ebde20881e4fe084"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/727",
      "id": 3005350327,
      "node_id": "PR_kwDOOTDVN86zIgG3",
      "number": 727,
      "state": "open",
      "locked": false,
      "title": "Move model alignment test to tpu runner",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Move model alignment test to tpu runner\n",
      "created_at": "2025-11-13T04:47:28Z",
      "updated_at": "2025-11-14T02:01:07Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "892e3db3a0a31ce5130e52ae693afd4559053a65",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_831667861",
        "ref": "test_831667861",
        "sha": "eb35fac7adb4f0822e988e17ea845411adc2ede0",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f703cfd31935a346b89eb11d13a04ec1dd9e74c0",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/727"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/727"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/727"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/727/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/727/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/727/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/eb35fac7adb4f0822e988e17ea845411adc2ede0"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/712",
      "id": 2997246377,
      "node_id": "PR_kwDOOTDVN86yplmp",
      "number": 712,
      "state": "open",
      "locked": false,
      "title": "[DO NOT SUBMIT] Testing github workflow from forked repo.",
      "user": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #\\<issue_number_goes_here\\>\r\n\r\n> It's a good idea to open an issue first for discussion.\r\n\r\n<!--- Describe your changes in detail. -->\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [ ] I have added all the necessary unit tests for my change.\r\n- [ ] I have verified that my change does not break existing code and all unit tests pass.\r\n- [ ] I have added all appropriate doc-strings/documentation.\r\n- [ ] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [ ] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [ ] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-11-11T00:55:45Z",
      "updated_at": "2025-11-11T00:55:47Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "53a69f2c02b83317321c0fbac2a76f1168c2fb1c",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "wang2yn84:lance_testing",
        "ref": "lance_testing",
        "sha": "cc18202295a1c3fac3b55946e49b52cdb1102e4c",
        "user": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1063535130,
          "node_id": "R_kgDOP2RCGg",
          "name": "tunix",
          "full_name": "wang2yn84/tunix",
          "private": false,
          "owner": {
            "login": "wang2yn84",
            "id": 13134832,
            "node_id": "MDQ6VXNlcjEzMTM0ODMy",
            "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/wang2yn84",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/wang2yn84/tunix",
          "created_at": "2025-09-24T18:59:48Z",
          "updated_at": "2025-11-11T00:53:21Z",
          "pushed_at": "2025-11-11T00:55:13Z",
          "homepage": "",
          "size": 7766,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "a3f1ca851d86811a7c3cf2ca23a915419b70c38b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/712"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/712"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/712"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/712/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/712/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/712/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/cc18202295a1c3fac3b55946e49b52cdb1102e4c"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/702",
      "id": 2987687972,
      "node_id": "PR_kwDOOTDVN86yFIAk",
      "number": 702,
      "state": "open",
      "locked": false,
      "title": "Update GitHub Actions trigger for `build_and_test_tunix.yml`.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Update GitHub Actions trigger for `build_and_test_tunix.yml`.\n",
      "created_at": "2025-11-07T08:38:05Z",
      "updated_at": "2025-11-10T18:53:40Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "4eb2fc7d20c5259f2711fa64496f205917917629",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_829310450",
        "ref": "test_829310450",
        "sha": "89fd5ae25eb229a4e6d70c398ecd8f86d5c407a6",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "045aeeb421866b7f7dd5e2b55ceee5bbfd817deb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/702"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/702"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/702"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/702/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/702/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/702/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/89fd5ae25eb229a4e6d70c398ecd8f86d5c407a6"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/693",
      "id": 2982753728,
      "node_id": "PR_kwDOOTDVN86xyTXA",
      "number": 693,
      "state": "open",
      "locked": false,
      "title": "Expose vLLM model for vllm sampler.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Expose vLLM model for vllm sampler.\n",
      "created_at": "2025-11-06T02:37:10Z",
      "updated_at": "2025-11-09T06:33:44Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_828717792",
        "ref": "test_828717792",
        "sha": "7182eb51eb8e9bad0eb6a0388da16d72ba98fcfa",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "ac5c9756395c58bd05b68f4dbea8d7da4731e01a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/693"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/693"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/693"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/693/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/693/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/693/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/7182eb51eb8e9bad0eb6a0388da16d72ba98fcfa"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/683",
      "id": 2978416504,
      "node_id": "PR_kwDOOTDVN86xhwd4",
      "number": 683,
      "state": "open",
      "locked": false,
      "title": "Add GRPO integration test with new backend to TPU workflow.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add GRPO integration test with new backend to TPU workflow.\n",
      "created_at": "2025-11-05T01:04:52Z",
      "updated_at": "2025-11-05T18:06:43Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_828192590",
        "ref": "test_828192590",
        "sha": "d12dfc7b0e0f77c9b6d571837d99094fdaf74d1f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f0d5d1e63e24f42647fd4e6122641d689f8bfd0e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/683"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/683"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/683"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/683/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/683/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/683/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d12dfc7b0e0f77c9b6d571837d99094fdaf74d1f"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/675",
      "id": 2975125418,
      "node_id": "PR_kwDOOTDVN86xVM-q",
      "number": 675,
      "state": "open",
      "locked": false,
      "title": "Fix Llama shardings",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fix Llama shardings\n",
      "created_at": "2025-11-04T05:52:45Z",
      "updated_at": "2025-11-04T18:51:23Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_827783783",
        "ref": "test_827783783",
        "sha": "47cd438708ec2dc7c5d8ce66864aaea25ee0f20a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "a6488fe43f8cd7aaba781b865685cf4be90c6ef9",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/675"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/675"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/675"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/675/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/675/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/675/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/47cd438708ec2dc7c5d8ce66864aaea25ee0f20a"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/656",
      "id": 2964825247,
      "node_id": "PR_kwDOOTDVN86wt6Sf",
      "number": 656,
      "state": "open",
      "locked": false,
      "title": "Move SFT, distillation, and RL tests to CPU workflow.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Move SFT, distillation, and RL tests to CPU workflow.\n\nThese tests do not require TPU hardware and can be run more efficiently on CPU-based runners, reducing TPU resource usage.\n",
      "created_at": "2025-10-30T22:18:19Z",
      "updated_at": "2025-11-05T01:02:46Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_826206059",
        "ref": "test_826206059",
        "sha": "7c1b1426bfa513557d8947f216e0456f79c88146",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "3809c4fad5f519912d96376359fbc56a20df2445",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/656"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/656"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/656"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/656/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/656/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/656/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/7c1b1426bfa513557d8947f216e0456f79c88146"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/647",
      "id": 2960994607,
      "node_id": "PR_kwDOOTDVN86wfTEv",
      "number": 647,
      "state": "open",
      "locked": false,
      "title": "Do not activate profiler when there is one already active",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Do not activate profiler when there is one already active\n",
      "created_at": "2025-10-29T22:38:44Z",
      "updated_at": "2025-10-29T22:45:47Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_825355289",
        "ref": "test_825355289",
        "sha": "7ef7944803c538d50f1f9140da4e9cce8c405d34",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "09b1024567a73c6cec2bffcdf42bb47a2a92b042",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/647"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/647"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/647"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/647/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/647/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/647/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/7ef7944803c538d50f1f9140da4e9cce8c405d34"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/633",
      "id": 2956117728,
      "node_id": "PR_kwDOOTDVN86wMsbg",
      "number": 633,
      "state": "open",
      "locked": false,
      "title": "speed up safetensor loading",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "speed up safetensor loading\n",
      "created_at": "2025-10-28T17:25:44Z",
      "updated_at": "2025-10-28T22:01:17Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_825099852",
        "ref": "test_825099852",
        "sha": "7060c1beef0531571d80ef94c29eba6a221fc286",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "02f6b3b5dec7abccf1272b41a040dd2e7165c4a9",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/633"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/633"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/633"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/633/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/633/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/633/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/7060c1beef0531571d80ef94c29eba6a221fc286"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/631",
      "id": 2953653210,
      "node_id": "PR_kwDOOTDVN86wDSva",
      "number": 631,
      "state": "open",
      "locked": false,
      "title": "test: add model alignment test for gemma3 models.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "test: add model alignment test for gemma3 models.\n",
      "created_at": "2025-10-28T04:32:50Z",
      "updated_at": "2025-11-12T02:01:21Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "d34c1999ccbe14536e222a428728490153e2bcbc",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_824821997",
        "ref": "test_824821997",
        "sha": "4342d9cfe000757a54f2b044f8eb569161695a40",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "a3f1ca851d86811a7c3cf2ca23a915419b70c38b",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/631"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/631"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/631"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/631/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/631/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/631/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/4342d9cfe000757a54f2b044f8eb569161695a40"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/627",
      "id": 2949257115,
      "node_id": "PR_kwDOOTDVN86vyheb",
      "number": 627,
      "state": "open",
      "locked": false,
      "title": "Refactor Tunix adapter to use model-specific backend mappings.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Refactor Tunix adapter to use model-specific backend mappings.\n",
      "created_at": "2025-10-27T02:58:24Z",
      "updated_at": "2025-10-27T02:58:26Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_824317443",
        "ref": "test_824317443",
        "sha": "d473242cc0c29c184b4931aaadb4c71db435edc5",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "0968c6e04f067b9bba526319b4535a23665abac3",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/627"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/627"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/627"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/627/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/627/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/627/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d473242cc0c29c184b4931aaadb4c71db435edc5"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/585",
      "id": 2924777472,
      "node_id": "PR_kwDOOTDVN86uVJAA",
      "number": 585,
      "state": "open",
      "locked": false,
      "title": "Add initial devcontainer configuration",
      "user": {
        "login": "Tsukimarf",
        "id": 215229009,
        "node_id": "U_kgDODNQiUQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Tsukimarf",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #\\<issue_number_goes_here\\>\r\n\r\n> It's a good idea to open an issue first for discussion.\r\n\r\n<!--- Describe your changes in detail. -->\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-10-17T15:08:25Z",
      "updated_at": "2026-02-17T08:32:13Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "2bc168829b4967e08b3c5b59d4d68ee984fc069c",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "Tsukimarf:patch-1",
        "ref": "patch-1",
        "sha": "934ab2048192867cda9567c5c9d6076d69d14af5",
        "user": {
          "login": "Tsukimarf",
          "id": 215229009,
          "node_id": "U_kgDODNQiUQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Tsukimarf",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068599224,
          "node_id": "R_kgDOP7GHuA",
          "name": "tunix",
          "full_name": "Tsukimarf/tunix",
          "private": false,
          "owner": {
            "login": "Tsukimarf",
            "id": 215229009,
            "node_id": "U_kgDODNQiUQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/215229009?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/Tsukimarf",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/Tsukimarf/tunix",
          "created_at": "2025-10-02T16:13:58Z",
          "updated_at": "2025-12-06T10:22:19Z",
          "pushed_at": "2025-12-06T10:22:01Z",
          "homepage": "https://tunix-five.vercel.app",
          "size": 14255,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 2,
          "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="
          },
          "allow_forking": true,
          "is_template": true,
          "web_commit_signoff_required": true,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 2,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "05093d9e91c206ebf18747ac7810ab5ff1eb9da2",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/585"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/585"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/585"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/585/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/585/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/585/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/934ab2048192867cda9567c5c9d6076d69d14af5"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/568",
      "id": 2914118419,
      "node_id": "PR_kwDOOTDVN86tsesT",
      "number": 568,
      "state": "open",
      "locked": false,
      "title": "Fix learning rate logging in case of schedule",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fix learning rate logging in case of schedule\n\nThe current code for fetching LR doesn't work when you chain objects to form\nyour optimiser.\n",
      "created_at": "2025-10-14T15:26:17Z",
      "updated_at": "2025-10-14T15:47:43Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_819233219",
        "ref": "test_819233219",
        "sha": "45c2225f621a15ded5f5639c22cd63e2f6bc8b50",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "37a436745bf23899b76384ac62b11f4119c22ea2",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/568"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/568"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/568"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/568/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/568/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/568/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/45c2225f621a15ded5f5639c22cd63e2f6bc8b50"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/561",
      "id": 2908691518,
      "node_id": "PR_kwDOOTDVN86tXxw-",
      "number": 561,
      "state": "open",
      "locked": false,
      "title": "Fix progress bar logging",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fix progress bar logging\n",
      "created_at": "2025-10-13T03:23:32Z",
      "updated_at": "2025-10-13T03:33:55Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_818455138",
        "ref": "test_818455138",
        "sha": "0b8ec9d9e4b27c012335098aee79571cbdf34431",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "780cbf5fb7d20f7dd4d5a8ffeb2b295e165198bf",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/561"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/561"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/561"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/561/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/561/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/561/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/0b8ec9d9e4b27c012335098aee79571cbdf34431"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/557",
      "id": 2906955531,
      "node_id": "PR_kwDOOTDVN86tRJ8L",
      "number": 557,
      "state": "open",
      "locked": false,
      "title": "Added Dr. GRPO and Magistral improvements",
      "user": {
        "login": "siddagra",
        "id": 52118936,
        "node_id": "MDQ6VXNlcjUyMTE4OTM2",
        "avatar_url": "https://avatars.githubusercontent.com/u/52118936?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/siddagra",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "<!--- Describe your changes in detail. -->\r\n\r\nThis PR adds several new configuration options to the GRPO learner, enabling support for recent algorithmic improvements from the literature:\r\n\r\n- **epsilon_high**: Defaults to Epsilon. Epsilon value for clipping upper bound. If None, defaults to epsilon for symmetric clipping. Set higher than epsilon for asymmetric clipping.  \r\n  *Clip Higher introduced in DAPO ([arxiv:2503.14476](https://arxiv.org/pdf/2503.14476)), also used in Magistral and VAPO ([arxiv:2504.05118](https://arxiv.org/abs/2504.05118)).*\r\n\r\n- **dr_grpo**: Default False. If True, use DR-GRPO variant which:\r\n  - Only subtracts mean rewards (no std dev normalization)\r\n  - Normalizes loss by max_tokens instead of actual token counts  \r\n  *See DR-GRPO ([arxiv:2503.20783](https://arxiv.org/pdf/2503.20783)).*\r\n\r\n- **max_tokens**: Only used if Dr-GRPO is True. Maximum generation tokens for DR-GRPO normalization. If None and dr_grpo is True, will attempt to infer from rollout config.\r\n\r\n- **magistral_adv_norm**: Default False. If True, normalize advantages by mini-batch std dev instead of group std dev after subtracting group mean.  \r\n  *See Magistral ([arxiv:2506.10910](https://arxiv.org/pdf/2506.10910)).*\r\n\r\n- **eliminate_non_diverse_groups**: Default False. If True,  groups where all rewards are identical are masked instead, as they provide no/noisey learning signal. Done this by setting loss for this group to 0 via masking.  \r\n  *Introduced in Magistral ([arxiv:2506.10910](https://arxiv.org/pdf/2506.10910)).*\r\n\r\n- **debug**: Default False. If True, print detailed debug information during training.\r\n\r\nMost of these improvements are supported both theoretically and empirically in the respective papers.\r\n\r\nAll of these features are kept False by default in order to mantain original functionality unless the user decides to enable some feature.\r\n\r\nThe reason for keeping these terms independent is twofold:\r\n1. To enable ablation studies with certain features on/off.\r\n2. To allow combining multiple theoretically sound corrections from all of these papers under the same framework.\r\n\r\n**Reference**\r\n- [GRPO](https://arxiv.org/abs/2402.03300)\r\n- [GSPO](https://www.arxiv.org/pdf/2507.18071)\r\n- [Magistral](https://arxiv.org/pdf/2506.10910)\r\n- [DR-GRPO](https://arxiv.org/pdf/2503.20783)\r\n- [DAPO (Clip Higher)](https://arxiv.org/pdf/2503.14476)\r\n- [VAPO](https://arxiv.org/abs/2504.05118)\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [Y] I have verified that my change does not break existing code and all unit tests pass.\r\n- [Y] I have added all appropriate doc-strings/documentation.\r\n- [Y] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [Y] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [Y] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n\r\nLet me know if you want to further customize or add more details!\r\nAlso let me know how I should add unit tests more concretely. I conduct unit tests in a main function but I assume that is not fine for this. ",
      "created_at": "2025-10-11T19:28:06Z",
      "updated_at": "2025-11-07T00:41:56Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "siddagra:main",
        "ref": "main",
        "sha": "62a6c3ac2221475394af3438848720b52d436a8f",
        "user": {
          "login": "siddagra",
          "id": 52118936,
          "node_id": "MDQ6VXNlcjUyMTE4OTM2",
          "avatar_url": "https://avatars.githubusercontent.com/u/52118936?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/siddagra",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1074425266,
          "node_id": "R_kgDOQAptsg",
          "name": "tunix",
          "full_name": "siddagra/tunix",
          "private": false,
          "owner": {
            "login": "siddagra",
            "id": 52118936,
            "node_id": "MDQ6VXNlcjUyMTE4OTM2",
            "avatar_url": "https://avatars.githubusercontent.com/u/52118936?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/siddagra",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/siddagra/tunix",
          "created_at": "2025-10-11T19:04:22Z",
          "updated_at": "2025-11-06T17:48:41Z",
          "pushed_at": "2025-11-06T17:48:28Z",
          "homepage": "",
          "size": 7559,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "a5a6d2f8e356dcf657e690ef2cd336e4b2b67ec9",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/557"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/557"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/557"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/557/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/557/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/557/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/62a6c3ac2221475394af3438848720b52d436a8f"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/534",
      "id": 2899064811,
      "node_id": "PR_kwDOOTDVN86szDfr",
      "number": 534,
      "state": "open",
      "locked": false,
      "title": "simplify micro batching config",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "simplify micro batching config\n",
      "created_at": "2025-10-09T00:34:01Z",
      "updated_at": "2025-10-09T01:00:41Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_816926071",
        "ref": "test_816926071",
        "sha": "cffc39031e47c0eb432b3268ca5dc3909b0ba7f2",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "93d3bfe7daa3cde745eb03ecf6c82448b52d5ba4",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/534"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/534"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/534"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/534/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/534/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/534/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/cffc39031e47c0eb432b3268ca5dc3909b0ba7f2"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/517",
      "id": 2892343002,
      "node_id": "PR_kwDOOTDVN86sZaba",
      "number": 517,
      "state": "open",
      "locked": false,
      "title": "Fix wandb integration issues in MetricsLogger",
      "user": {
        "login": "pujariaditya",
        "id": 46868731,
        "node_id": "MDQ6VXNlcjQ2ODY4NzMx",
        "avatar_url": "https://avatars.githubusercontent.com/u/46868731?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/pujariaditya",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR fixes wandb integration issues in MetricsLogger reported in #137:\r\n\r\n1. **Prevents wandb re-initialization**: Added check to ensure MetricsLogger doesn't initialize wandb if a run is already active, fixing \"You must call wandb.init() before wandb.log()\" error when users manually initialize wandb.\r\n\r\n2. **Ensures monotonic step tracking**: Implemented global step counter `_last_steps` that tracks steps per metric prefix, preventing \"Tried to log to step 0 that is less than the current step 3\" warnings.\r\n\r\n3. **Conditional wandb.finish()**: Only finishes wandb runs if they were started by MetricsLogger, avoiding interference with user-managed sessions.\r\n\r\n**Reference**\r\n- https://github.com/google/tunix/issues/137\r\n\r\n**Checklist**\r\n\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-10-07T01:21:53Z",
      "updated_at": "2025-10-28T19:50:31Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "pujariaditya:main",
        "ref": "main",
        "sha": "7cf6c7a29304e6353b77bd51986ea0433bb65554",
        "user": {
          "login": "pujariaditya",
          "id": 46868731,
          "node_id": "MDQ6VXNlcjQ2ODY4NzMx",
          "avatar_url": "https://avatars.githubusercontent.com/u/46868731?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/pujariaditya",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1071170401,
          "node_id": "R_kgDOP9jDYQ",
          "name": "tunix",
          "full_name": "pujariaditya/tunix",
          "private": false,
          "owner": {
            "login": "pujariaditya",
            "id": 46868731,
            "node_id": "MDQ6VXNlcjQ2ODY4NzMx",
            "avatar_url": "https://avatars.githubusercontent.com/u/46868731?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/pujariaditya",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/pujariaditya/tunix",
          "created_at": "2025-10-07T01:05:12Z",
          "updated_at": "2025-10-07T01:09:29Z",
          "pushed_at": "2025-10-07T01:09:24Z",
          "homepage": "",
          "size": 7030,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "6e3682d87931dbec240b1e6718a33595f58bdfa5",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/517"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/517"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/517"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/517/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/517/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/517/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/7cf6c7a29304e6353b77bd51986ea0433bb65554"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        1
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/511",
      "id": 2891494985,
      "node_id": "PR_kwDOOTDVN86sWLZJ",
      "number": 511,
      "state": "open",
      "locked": false,
      "title": "Uiuc vlm pr compressed fixed",
      "user": {
        "login": "immuntasir",
        "id": 12914001,
        "node_id": "MDQ6VXNlcjEyOTE0MDAx",
        "avatar_url": "https://avatars.githubusercontent.com/u/12914001?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/immuntasir",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Resolves #510 \r\n\r\n<!--- Describe your changes in detail. -->\r\nThis PR introduces **multimodal support to Tunix’s Gemma3** model and **adds a new vision-language DPO demonstration notebook** (vl_dpo_demo_gemma3.ipynb), extending the framework to handle image-text reasoning and multimodal alignment.  Key changes includes:\r\n- **Multimodal Gemma3 Model:**\r\n    1. Added SigLIP vision encoder and MultimodalProjector to Gemma3, enabling joint image–text forward passes.\r\n    2. Updated ModelConfig and parameter mapping to support multimodal checkpoints (multimodal=True).\r\n- **DPO Example Notebook:** Introduced examples/vl_dpo_demo_gemma3.ipynb, demonstrating multimodal DPO fine-tuning with image-conditioned  prompts using multimodal gemma3\r\n- **Gemma3 Tokenizer Adapter:** Extended TokenizerAdapter to support Hugging Face Processor objects\r\n- **VLM Sampler and Utils:**\r\n   1. Added VLMSampler for multimodal generation (tunix/generate/vlm_sampler.py)\r\n   2. Added preprocess_image() utility in tunix/generate/utils.py for SigLIP/CLIP-style normalization.\r\n- **DPO Pipeline Updates:** Modified tunix/sft/dpo/dpo_trainer.py to handle multimodal data ({“text”, “image”} prompts) and propagate image tensors through training.\r\n\r\n@Tianjiao-Yu led this effort and @jxiong21029 contributed to the Gemma3 integration. Please also mention @Tianjiao-Yu if you have any questions/comments/feedback.\r\n\r\n**Colab Notebook**\r\nvl_dpo_demo_gemma3.ipynb\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-10-06T19:06:31Z",
      "updated_at": "2026-02-06T04:47:39Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "PLAN-Lab:uiuc-vlm-pr-compressed-fixed",
        "ref": "uiuc-vlm-pr-compressed-fixed",
        "sha": "1c4d1ff2ed24c4a1138d4d20141a38dd77ab0340",
        "user": {
          "login": "PLAN-Lab",
          "id": 99358985,
          "node_id": "O_kgDOBewZCQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/99358985?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/PLAN-Lab",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1051322788,
          "node_id": "R_kgDOPqnppA",
          "name": "tunix",
          "full_name": "PLAN-Lab/tunix",
          "private": false,
          "owner": {
            "login": "PLAN-Lab",
            "id": 99358985,
            "node_id": "O_kgDOBewZCQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/99358985?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/PLAN-Lab",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/PLAN-Lab/tunix",
          "created_at": "2025-09-05T19:42:57Z",
          "updated_at": "2026-01-26T01:40:52Z",
          "pushed_at": "2026-02-06T04:47:38Z",
          "homepage": "",
          "size": 49312,
          "stargazers_count": 1,
          "watchers_count": 1,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 1,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "b2be96833508ae261122f7b8c3c2663943179a8f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/511"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/511"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/511"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/511/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/511/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/511/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/1c4d1ff2ed24c4a1138d4d20141a38dd77ab0340"
        }
      },
      "author_association": "CONTRIBUTOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        5,
        510
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/492",
      "id": 2883749803,
      "node_id": "PR_kwDOOTDVN86r4oer",
      "number": 492,
      "state": "open",
      "locked": false,
      "title": "Update README.md",
      "user": {
        "login": "OP-Raaja",
        "id": 93973876,
        "node_id": "U_kgDOBZntdA",
        "avatar_url": "https://avatars.githubusercontent.com/u/93973876?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/OP-Raaja",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fixed minor grammatical errors.\r\n\r\n<!--- Describe your changes in detail. -->\r\n**Description of Changes:**\r\n\r\n- Fixed minor grammatical and spelling errors in the README.\r\n- Improved readability and clarity of documentation.\r\n- No functional changes to code.\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [ ] I have added all the necessary unit tests for my change.\r\n- [ ] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-10-03T04:17:30Z",
      "updated_at": "2026-01-19T09:18:58Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "OP-Raaja:patch-1",
        "ref": "patch-1",
        "sha": "0a8027280c9818eb7c3fd70a4f022beee3f44014",
        "user": {
          "login": "OP-Raaja",
          "id": 93973876,
          "node_id": "U_kgDOBZntdA",
          "avatar_url": "https://avatars.githubusercontent.com/u/93973876?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/OP-Raaja",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068886310,
          "node_id": "R_kgDOP7XpJg",
          "name": "tunix",
          "full_name": "OP-Raaja/tunix",
          "private": false,
          "owner": {
            "login": "OP-Raaja",
            "id": 93973876,
            "node_id": "U_kgDOBZntdA",
            "avatar_url": "https://avatars.githubusercontent.com/u/93973876?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/OP-Raaja",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/OP-Raaja/tunix",
          "created_at": "2025-10-03T04:10:32Z",
          "updated_at": "2025-10-25T07:40:07Z",
          "pushed_at": "2026-01-19T09:18:57Z",
          "homepage": "",
          "size": 92784,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f71f2f76c7f303b6a63cb208ff5bc7adb0d9250d",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/492"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/492"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/492"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/492/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/492/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/492/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/0a8027280c9818eb7c3fd70a4f022beee3f44014"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/491",
      "id": 2883565722,
      "node_id": "PR_kwDOOTDVN86r37ia",
      "number": 491,
      "state": "open",
      "locked": false,
      "title": "Fix logging inconsistency: unify metrics logging to use global_steps",
      "user": {
        "login": "joaobenedetmachado",
        "id": 105388117,
        "node_id": "U_kgDOBkgYVQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/105388117?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/joaobenedetmachado",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "# Problem\r\nLogging for metrics returned by loss functions via aux was at a `_iter_steps` level,\r\nwhereas other metrics were logged at a `global_steps` level. The progress bar for\r\nGRPO/PPO was at a `_iter_steps` level. This inconsistency made it confusing for\r\nusers to pass `max_steps` at a `_iter_steps` level, and not at `global_steps` level.\r\n\r\n## Solution\r\nUnified logging to use `global_steps` consistently across all components:\r\n- Add global_steps property to PeftTrainer (returns train_steps for compatibility)\r\n- Update DPO trainer to use global_steps for aux metrics logging\r\n- Update progress bar to use global_steps for initial_steps\r\n- Ensures consistent step counting across all RL algorithms\r\n- Resolves confusion about max_steps parameter interpretation\r\n\r\n## Files Changed\r\n- `tunix/sft/peft_trainer.py` - Added global_steps property and updated progress bar\r\n- `tunix/sft/dpo/dpo_trainer.py` - Updated logging methods to use global_steps\r\n\r\n## Testing\r\n- All code verification tests pass\r\n- Backward compatibility maintained (global_steps = train_steps)\r\n- Demo notebook available in Colab\r\n\r\nResolves #390 \r\n\r\n**Colab Notebook**\r\nhttps://colab.research.google.com/drive/1hMelDYWB5w3v3W6anOChPDFXruMCbjlY?usp=sharing\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [x] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-10-03T02:18:56Z",
      "updated_at": "2025-10-24T21:12:29Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "1b18f038d007e027d7315fdd5cfa5f3e035b9f6f",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "jiangyangmu",
          "id": 1014774,
          "node_id": "MDQ6VXNlcjEwMTQ3NzQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1014774?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/jiangyangmu",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "1": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "2": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "3": {
          "login": "abheesht17",
          "id": 31360468,
          "node_id": "MDQ6VXNlcjMxMzYwNDY4",
          "avatar_url": "https://avatars.githubusercontent.com/u/31360468?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/abheesht17",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "4": {
          "login": "sizhit2",
          "id": 32147610,
          "node_id": "MDQ6VXNlcjMyMTQ3NjEw",
          "avatar_url": "https://avatars.githubusercontent.com/u/32147610?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/sizhit2",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "5": {
          "login": "hgao327",
          "id": 108708761,
          "node_id": "U_kgDOBnrDmQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/108708761?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/hgao327",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "6": {
          "login": "lc5211",
          "id": 181417613,
          "node_id": "U_kgDOCtA2jQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/181417613?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/lc5211",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "joaobenedetmachado:fix/logging-inconsistency-global-steps",
        "ref": "fix/logging-inconsistency-global-steps",
        "sha": "3814ed6a8af158d43742c811702aae1dd0d6413b",
        "user": {
          "login": "joaobenedetmachado",
          "id": 105388117,
          "node_id": "U_kgDOBkgYVQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/105388117?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/joaobenedetmachado",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068832737,
          "node_id": "R_kgDOP7UX4Q",
          "name": "tunix",
          "full_name": "joaobenedetmachado/tunix",
          "private": false,
          "owner": {
            "login": "joaobenedetmachado",
            "id": 105388117,
            "node_id": "U_kgDOBkgYVQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/105388117?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/joaobenedetmachado",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/joaobenedetmachado/tunix",
          "created_at": "2025-10-03T01:25:50Z",
          "updated_at": "2025-10-03T02:42:14Z",
          "pushed_at": "2025-10-24T21:11:31Z",
          "homepage": "",
          "size": 6943,
          "stargazers_count": 1,
          "watchers_count": 1,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 1,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "1f3d861ec6b2fcc7c62b7381e9232931b216b0f9",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/491"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/491"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/491"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/491/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/491/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/491/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/3814ed6a8af158d43742c811702aae1dd0d6413b"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        3,
        390
      ]
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/483",
      "id": 2882827705,
      "node_id": "PR_kwDOOTDVN86r1HW5",
      "number": 483,
      "state": "open",
      "locked": false,
      "title": "Fix reward function edge case.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fix reward function edge case.\nAdd unit test for reward function\n",
      "created_at": "2025-10-02T19:36:22Z",
      "updated_at": "2025-10-02T19:36:22Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_813997236",
        "ref": "test_813997236",
        "sha": "25736c3cd07bc783f92709cd4c9300a6b924875f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "8647e07b64c7ff1af4d6190508bbdb5f05a7aa0d",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/483"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/483"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/483"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/483/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/483/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/483/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/25736c3cd07bc783f92709cd4c9300a6b924875f"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/444",
      "id": 2873619472,
      "node_id": "PR_kwDOOTDVN86rR_QQ",
      "number": 444,
      "state": "open",
      "locked": false,
      "title": "Prepare DPO notebook for release",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Prepare DPO notebook for release\n",
      "created_at": "2025-09-30T09:19:52Z",
      "updated_at": "2025-10-16T08:45:31Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "4998b44a7436d0ec4ced5a59c13da2e2a7200b8f",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_813165256",
        "ref": "test_813165256",
        "sha": "70fdf17571bd8acccf47a9cba24328e04d67c6ba",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "91ff4d6e09bc06622618566af679f033c1cdc4f6",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/444"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/444"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/444"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/444/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/444/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/444/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/70fdf17571bd8acccf47a9cba24328e04d67c6ba"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/418",
      "id": 2869437513,
      "node_id": "PR_kwDOOTDVN86rCCRJ",
      "number": 418,
      "state": "open",
      "locked": false,
      "title": "Fix DPO tests",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fix DPO tests\n",
      "created_at": "2025-09-29T07:48:16Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_812663885",
        "ref": "test_812663885",
        "sha": "ae9abd7e54131b440140ca56c63fa09dbeef06fe",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/418"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/418"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/418"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/418/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/418/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/418/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/ae9abd7e54131b440140ca56c63fa09dbeef06fe"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/416",
      "id": 2868310406,
      "node_id": "PR_kwDOOTDVN86q9vGG",
      "number": 416,
      "state": "open",
      "locked": false,
      "title": "adding a check for input_strings being a string",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "adding a check for input_strings being a string\n",
      "created_at": "2025-09-28T19:13:42Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_812508798",
        "ref": "test_812508798",
        "sha": "f35240cc53b3c3b72d23af255fba65761032855d",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/416"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/416"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/416"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/416/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/416/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/416/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/f35240cc53b3c3b72d23af255fba65761032855d"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/382",
      "id": 2861129338,
      "node_id": "PR_kwDOOTDVN86qiV56",
      "number": 382,
      "state": "open",
      "locked": false,
      "title": "Add PPO OSS example",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add PPO OSS example\n",
      "created_at": "2025-09-25T15:31:00Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_811362001",
        "ref": "test_811362001",
        "sha": "efef301af3bbb6ee606e4428762cf0cd30af18b5",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/382"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/382"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/382"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/382/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/382/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/382/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/efef301af3bbb6ee606e4428762cf0cd30af18b5"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/366",
      "id": 2855344013,
      "node_id": "PR_kwDOOTDVN86qMReN",
      "number": 366,
      "state": "open",
      "locked": false,
      "title": "Support multiple reward models",
      "user": {
        "login": "anfernee",
        "id": 174200,
        "node_id": "MDQ6VXNlcjE3NDIwMA==",
        "avatar_url": "https://avatars.githubusercontent.com/u/174200?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/anfernee",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This is to implement one of the TODO items in the code base from @tsbao. I haven't checked with him this is right approach. Please let me know if it matches what's in his mind or not, I am happy to make changes. \r\n\r\n\r\n\r\n**Reference**\r\n<!--- Link to the reference implementation, research paper, and GitHub issue. -->\r\n\r\n**Colab Notebook**\r\n<!-- If adding any new API, attach a Colab notebook showing the high-level usage.-->\r\n\r\n**Checklist**\r\n<!--- Please make sure all checkboxes are ticked before submitting this PR for review. -->\r\n\r\n- [x] I have added all the necessary unit tests for my change.\r\n- [x] I have verified that my change does not break existing code and all unit tests pass.\r\n- [x] I have added all appropriate doc-strings/documentation.\r\n- [x] My PR is based on the latest changes of the main branch (if unsure, rebase the code).\r\n- [ ] I have signed the [Contributor License Agreement](https://cla.developers.google.com/about).\r\n- [x] I have followed [Contribution Guidelines](https://github.com/google/tunix/blob/main/CONTRIBUTING.md).\r\n",
      "created_at": "2025-09-24T04:20:45Z",
      "updated_at": "2025-10-24T00:55:49Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "anfernee:multi-rewards",
        "ref": "multi-rewards",
        "sha": "1790c746da2b0aeafb099ffb0449a8df60ff6b50",
        "user": {
          "login": "anfernee",
          "id": 174200,
          "node_id": "MDQ6VXNlcjE3NDIwMA==",
          "avatar_url": "https://avatars.githubusercontent.com/u/174200?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/anfernee",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1063023846,
          "node_id": "R_kgDOP1x05g",
          "name": "tunix",
          "full_name": "anfernee/tunix",
          "private": false,
          "owner": {
            "login": "anfernee",
            "id": 174200,
            "node_id": "MDQ6VXNlcjE3NDIwMA==",
            "avatar_url": "https://avatars.githubusercontent.com/u/174200?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/anfernee",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/anfernee/tunix",
          "created_at": "2025-09-24T04:14:20Z",
          "updated_at": "2025-09-24T04:14:20Z",
          "pushed_at": "2025-09-24T04:14:50Z",
          "homepage": "",
          "size": 1952,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/366"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/366"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/366"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/366/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/366/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/366/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/1790c746da2b0aeafb099ffb0449a8df60ff6b50"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/329",
      "id": 2837453262,
      "node_id": "PR_kwDOOTDVN86pIBnO",
      "number": 329,
      "state": "open",
      "locked": false,
      "title": "notebook fix",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "notebook fix\n",
      "created_at": "2025-09-17T17:45:54Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_808214917",
        "ref": "test_808214917",
        "sha": "7b88a26ef5f95bd6a799fa5c2f2f1441ed59c9b7",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/329"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/329"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/329"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/329/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/329/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/329/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/7b88a26ef5f95bd6a799fa5c2f2f1441ed59c9b7"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/322",
      "id": 2834593463,
      "node_id": "PR_kwDOOTDVN86o9Ha3",
      "number": 322,
      "state": "open",
      "locked": false,
      "title": "doc",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "doc\n",
      "created_at": "2025-09-16T23:06:30Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_807879169",
        "ref": "test_807879169",
        "sha": "42a1586e9a40609705a5090ecccae3c462f95a74",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/322"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/322"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/322"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/322/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/322/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/322/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/42a1586e9a40609705a5090ecccae3c462f95a74"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/314",
      "id": 2833365747,
      "node_id": "PR_kwDOOTDVN86o4brz",
      "number": 314,
      "state": "open",
      "locked": false,
      "title": "Refactor DPO",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Refactor DPO\n\n- Allow users to pass string inputs directly instead of having to tokenize, pad them.\n- Remove unnecessary padding calls.\n- Allow different padding lengths for prompt and response.\n",
      "created_at": "2025-09-16T14:47:31Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_807656272",
        "ref": "test_807656272",
        "sha": "e344dc4088bba9fc5dc83877d0ea2d13eac6dc0a",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/314"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/314"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/314"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/314/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/314/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/314/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/e344dc4088bba9fc5dc83877d0ea2d13eac6dc0a"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/288",
      "id": 2817246431,
      "node_id": "PR_kwDOOTDVN86n68Tf",
      "number": 288,
      "state": "open",
      "locked": false,
      "title": "Add an image and build script to Tunix",
      "user": {
        "login": "annyan09023",
        "id": 7133701,
        "node_id": "MDQ6VXNlcjcxMzM3MDE=",
        "avatar_url": "https://avatars.githubusercontent.com/u/7133701?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/annyan09023",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "To test with image:\r\n```\r\nsudo docker run -it --rm --net=host --ipc=host --ulimit memlock=-1:-1 -v \"$(pwd)\":/app --workdir /app --device=/dev/vfio/0       \r\n   --device=/dev/vfio/1 --device=/dev/vfio/2 --device=/dev/vfio/3 --device=/dev/vfio/4 --device=/dev/vfio/5 --device=/dev/vfio/6        │\r\n   --device=/dev/vfio/7 --device=/dev/vfio/vfio tunix_vllm_image bash\r\n```\r\nThe scripts/grpo_demo_llama3_qwen2.py is not runnable now because the dataset is not downloaded by the script, instead, it expects to copy to a gcs bucket, I will fix that part",
      "created_at": "2025-09-11T01:13:21Z",
      "updated_at": "2025-10-24T01:19:49Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "67d7746a87817806a4f9ad5b91198e8301559b49",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {
        "0": {
          "login": "tianshub",
          "id": 4454178,
          "node_id": "MDQ6VXNlcjQ0NTQxNzg=",
          "avatar_url": "https://avatars.githubusercontent.com/u/4454178?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/tianshub",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:anyan/build_image",
        "ref": "anyan/build_image",
        "sha": "c5ac45b1c6c0b9fe01ce7a1799bb0863073ffc7e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/288"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/288"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/288"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/288/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/288/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/288/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/c5ac45b1c6c0b9fe01ce7a1799bb0863073ffc7e"
        }
      },
      "author_association": "COLLABORATOR",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/257",
      "id": 2803104052,
      "node_id": "PR_kwDOOTDVN86nE_k0",
      "number": 257,
      "state": "open",
      "locked": false,
      "title": "[TunixTelemetryOptimization] Use a separate thread for metrics in tunix.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[TunixTelemetryOptimization] Use a separate thread for metrics in tunix.\n",
      "created_at": "2025-09-05T16:30:23Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_801016680",
        "ref": "test_801016680",
        "sha": "0eee469126b779ff48b0a581cc6edcf58aafac92",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/257"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/257"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/257"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/257/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/257/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/257/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/0eee469126b779ff48b0a581cc6edcf58aafac92"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/247",
      "id": 2796775132,
      "node_id": "PR_kwDOOTDVN86ms2bc",
      "number": 247,
      "state": "open",
      "locked": false,
      "title": "Multi-threaad `create_model_from_safe_tensors` per safetensor file.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Multi-threaad `create_model_from_safe_tensors` per safetensor file.\n",
      "created_at": "2025-09-03T18:04:17Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_802613880",
        "ref": "test_802613880",
        "sha": "226a8415ad49a916703ab385a8ac710350c035ea",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/247"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/247"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/247"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/247/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/247/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/247/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/226a8415ad49a916703ab385a8ac710350c035ea"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/245",
      "id": 2795010153,
      "node_id": "PR_kwDOOTDVN86mmHhp",
      "number": 245,
      "state": "open",
      "locked": false,
      "title": "Track global steps for PPO",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Track global steps for PPO\n",
      "created_at": "2025-09-03T08:05:23Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_802281643",
        "ref": "test_802281643",
        "sha": "592edd9dfb5f7af3baf0720e9a8bc1a863c1da5f",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/245"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/245"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/245"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/245/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/245/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/245/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/592edd9dfb5f7af3baf0720e9a8bc1a863c1da5f"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/194",
      "id": 2741048974,
      "node_id": "PR_kwDOOTDVN86jYRaO",
      "number": 194,
      "state": "open",
      "locked": false,
      "title": "[Tunix] donate model to save HBM consumption.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "[Tunix] donate model to save HBM consumption.\n",
      "created_at": "2025-08-13T00:05:45Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_794318792",
        "ref": "test_794318792",
        "sha": "ca9236e0641b7cc920940c72f86fbbe5b5c4b7ff",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/194"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/194"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/194"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/194/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/194/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/194/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/ca9236e0641b7cc920940c72f86fbbe5b5c4b7ff"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/125",
      "id": 2683472334,
      "node_id": "PR_kwDOOTDVN86f8onO",
      "number": 125,
      "state": "open",
      "locked": false,
      "title": "Fix Qwen3 attention with batch > 1 and num_kv_heads property of attention. Added test",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Fix Qwen3 attention with batch > 1 and num_kv_heads property of attention. Added test\n",
      "created_at": "2025-07-21T23:31:58Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_785617436",
        "ref": "test_785617436",
        "sha": "d2b0089a2ead36f3802bc6e8411c6f402f7d9d0e",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/125"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/125"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/125"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/125/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/125/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/125/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/d2b0089a2ead36f3802bc6e8411c6f402f7d9d0e"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/108",
      "id": 2668134743,
      "node_id": "PR_kwDOOTDVN86fCIFX",
      "number": 108,
      "state": "open",
      "locked": false,
      "title": "enable resharding cm for only tpu devices",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "enable resharding cm for only tpu devices\n",
      "created_at": "2025-07-15T17:26:11Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_783382993",
        "ref": "test_783382993",
        "sha": "616a8c61a7ebf99fed83330e5947f6ba5258248c",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/108"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/108"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/108"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/108/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/108/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/108/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/616a8c61a7ebf99fed83330e5947f6ba5258248c"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/106",
      "id": 2665665979,
      "node_id": "PR_kwDOOTDVN86e4tW7",
      "number": 106,
      "state": "open",
      "locked": false,
      "title": "Improve Llama3 loading",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Improve Llama3 loading\n",
      "created_at": "2025-07-14T23:58:27Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_783086701",
        "ref": "test_783086701",
        "sha": "489022ca39ed02ac2db1f9c525864239fb1037b5",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/106"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/106"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/106"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/106/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/106/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/106/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/489022ca39ed02ac2db1f9c525864239fb1037b5"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/92",
      "id": 2638862073,
      "node_id": "PR_kwDOOTDVN86dSdb5",
      "number": 92,
      "state": "open",
      "locked": false,
      "title": "Add Qwen3 from_pretrained, generation example, and DeepseekV3 model support",
      "user": {
        "login": "danikhan632",
        "id": 48022006,
        "node_id": "MDQ6VXNlcjQ4MDIyMDA2",
        "avatar_url": "https://avatars.githubusercontent.com/u/48022006?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/danikhan632",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "### ✅ Qwen3 Enhancements\r\n\r\n* **New `from_pretrained()` method** in `tunix.models.qwen3.params`:\r\n\r\n  * Supports loading Qwen3 models directly from the Hugging Face Hub.\r\n  * Automatically maps Hugging Face config (`AutoConfig`) to Tunix's `ModelConfig`.\r\n  * Loads weights using `snapshot_download` and `create_model_from_safe_tensors`.\r\n\r\n### 🧪 Qwen3 Generation Example\r\n\r\n* Adds a standalone example script demonstrating:\r\n\r\n  * Loading `Qwen/Qwen3-0.6B` from Hugging Face.\r\n  * Using `AutoTokenizer` with chat templating (`enable_thinking=True`).\r\n  * Running inference using `Sampler` with KV cache and token generation.\r\n\r\n### 🚀 DeepseekV3 Model Support\r\n\r\n* Adds full model definition for **DeepseekV3**:\r\n* Supports `from_pretrained()` loading from Hugging Face safetensors.\r\n",
      "created_at": "2025-07-03T15:13:19Z",
      "updated_at": "2025-10-23T21:52:57Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": {
        "login": "wang2yn84",
        "id": 13134832,
        "node_id": "MDQ6VXNlcjEzMTM0ODMy",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wang2yn84",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "assignees": {
        "0": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_reviewers": {
        "0": {
          "login": "wang2yn84",
          "id": 13134832,
          "node_id": "MDQ6VXNlcjEzMTM0ODMy",
          "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/wang2yn84",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        }
      },
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "danikhan632:qwen3_deepseek",
        "ref": "qwen3_deepseek",
        "sha": "04572ed41c8655a17ad200e93d6b91727a94c115",
        "user": {
          "login": "danikhan632",
          "id": 48022006,
          "node_id": "MDQ6VXNlcjQ4MDIyMDA2",
          "avatar_url": "https://avatars.githubusercontent.com/u/48022006?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/danikhan632",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1009372923,
          "node_id": "R_kgDOPCnO-w",
          "name": "tunix",
          "full_name": "danikhan632/tunix",
          "private": false,
          "owner": {
            "login": "danikhan632",
            "id": 48022006,
            "node_id": "MDQ6VXNlcjQ4MDIyMDA2",
            "avatar_url": "https://avatars.githubusercontent.com/u/48022006?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/danikhan632",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A JAX-native LLM Post-Training Library",
          "fork": true,
          "url": "https://api.github.com/repos/danikhan632/tunix",
          "created_at": "2025-06-27T03:01:35Z",
          "updated_at": "2025-07-03T14:59:25Z",
          "pushed_at": "2025-07-03T15:09:44Z",
          "homepage": "",
          "size": 226,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": 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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/92"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/92"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/92"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/92/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/92/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/92/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/04572ed41c8655a17ad200e93d6b91727a94c115"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/74",
      "id": 2603004495,
      "node_id": "PR_kwDOOTDVN86bJrJP",
      "number": 74,
      "state": "open",
      "locked": false,
      "title": "Change nnx split and store transformer state.",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Change nnx split and store transformer state.\n",
      "created_at": "2025-06-18T21:59:03Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "1e9299b7bb594e7b8b92e15c866142fc55604ae2",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_773053835",
        "ref": "test_773053835",
        "sha": "cb8a16c1d50eaa11d2f59d0bd5a9fe4d6319d5db",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/74"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/74"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/74"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/74/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/74/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/74/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/cb8a16c1d50eaa11d2f59d0bd5a9fe4d6319d5db"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/google/tunix/pulls/18",
      "id": 2515678225,
      "node_id": "PR_kwDOOTDVN86V8jQR",
      "number": 18,
      "state": "open",
      "locked": false,
      "title": "Add an optional section to serve the GRPO-tuned model via vLLM in the GRPO tutorial",
      "user": {
        "login": "copybara-service[bot]",
        "id": 56741989,
        "node_id": "MDM6Qm90NTY3NDE5ODk=",
        "avatar_url": "https://avatars.githubusercontent.com/in/44061?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/copybara-service%5Bbot%5D",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Add an optional section to serve the GRPO-tuned model via vLLM in the GRPO tutorial\n",
      "created_at": "2025-05-13T07:16:08Z",
      "updated_at": "2025-09-30T00:18:19Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "google:test_758077358",
        "ref": "test_758077358",
        "sha": "17999b0b653cc61b22ab486fe952c76620ca5ebf",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "google:main",
        "ref": "main",
        "sha": "f3a7361a303c172b6003a5ae4ae95951e18a56cb",
        "user": {
          "login": "google",
          "id": 1342004,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
          "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/google",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 959501623,
          "node_id": "R_kgDOOTDVNw",
          "name": "tunix",
          "full_name": "google/tunix",
          "private": false,
          "owner": {
            "login": "google",
            "id": 1342004,
            "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
            "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/google",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "A Lightweight LLM Post-Training Library",
          "fork": false,
          "url": "https://api.github.com/repos/google/tunix",
          "created_at": "2025-04-02T22:19:15Z",
          "updated_at": "2026-02-15T21:28:44Z",
          "pushed_at": "2026-02-17T10:58:30Z",
          "homepage": "",
          "size": 99707,
          "stargazers_count": 2155,
          "watchers_count": 2155,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": false,
          "has_pages": false,
          "has_discussions": true,
          "forks_count": 239,
          "archived": false,
          "disabled": false,
          "open_issues_count": 148,
          "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="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "has_pull_requests": true,
          "pull_request_creation_policy": "all",
          "topics": {},
          "visibility": "public",
          "forks": 239,
          "open_issues": 148,
          "watchers": 2155,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/google/tunix/pulls/18"
        },
        "html": {
          "href": "https://github.com/google/tunix/pull/18"
        },
        "issue": {
          "href": "https://api.github.com/repos/google/tunix/issues/18"
        },
        "comments": {
          "href": "https://api.github.com/repos/google/tunix/issues/18/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/google/tunix/pulls/18/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/google/tunix/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/google/tunix/pulls/18/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/google/tunix/statuses/17999b0b653cc61b22ab486fe952c76620ca5ebf"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    }
  ],
  "discussions": [
    {
      "id": "D_kwDOOTDVN84AjQgP",
      "number": 883,
      "title": "Why did you guys remove the common.py file?",
      "body": "I was actually going through the entire repository for a couple of days and noticed that the tunix/models/common.py file was deleted and is no longer available:(\r\n\r\nWhy is it so?\r\nCan I just review what was the content in it...?\r\nThanks a lot:)",
      "created_at": "2025-12-12T22:12:35Z",
      "updated_at": "2025-12-12T22:12:35Z",
      "category": {
        "name": "General",
        "emoji": ":speech_balloon:"
      },
      "answer": null,
      "user": {
        "login": "prnvpwr2612",
        "avatar_url": "https://avatars.githubusercontent.com/u/148087983?u=5f2f878d51edd644dc1d7a6c6feca3e31197af5d&v=4"
      }
    },
    {
      "id": "D_kwDOOTDVN84AjL-S",
      "number": 856,
      "title": "Interested in contributing — looking for guidance on where to begin",
      "body": "Hi! I'm interested in contributing to the Tunix library.\r\nI'm an intermediate Python user with a fair understanding of JAX and FLAX ,although I'm new to open-source, I'd love to start getting involved with the project.\r\n\r\nI'm looking for recommendations on good entry points where I can make meaningful contributions.I'm open to working on documentation, examples, small features, cleanup, or anything else that'd be helpful for the project.\r\n\r\nI'm looking forward to learning the workflow, collaborating with the team and contributing to the project's growth.\r\n\r\nThank you!",
      "created_at": "2025-12-08T12:58:12Z",
      "updated_at": "2025-12-09T21:15:47Z",
      "category": {
        "name": "General",
        "emoji": ":speech_balloon:"
      },
      "answer": null,
      "user": {
        "login": "SarveshMahalingam",
        "avatar_url": "https://avatars.githubusercontent.com/u/90710042?v=4"
      }
    },
    {
      "id": "D_kwDOOTDVN84Ai9pV",
      "number": 787,
      "title": "What difference between Tunix and EasyDeL?",
      "body": "It seems there is already a mature training framework \r\nhttps://github.com/erfanzar/EasyDeL",
      "created_at": "2025-11-21T18:42:23Z",
      "updated_at": "2025-11-21T18:42:25Z",
      "category": {
        "name": "General",
        "emoji": ":speech_balloon:"
      },
      "answer": null,
      "user": {
        "login": "MoFHeka",
        "avatar_url": "https://avatars.githubusercontent.com/u/90189118?u=fc671f83739885a57a7b7c41201a6b1b546855d9&v=4"
      }
    },
    {
      "id": "D_kwDOOTDVN84Aiysp",
      "number": 705,
      "title": "RFC: GPU Enablement for Tunix (Jax GPU)",
      "body": "Status: Draft for community feedback\r\nAuthors: Lance Wang\r\n\r\n1. Motivation\r\n\r\nTunix focuses on TPU-first training/inference for SFT and RL (DPO/PPO/GRPO/GSPO/...). Community users and contributors have expressed strong interest in running Tunix on GPUs (A100/H100, 4090/4080, L4, etc.). GPU support broadens accessibility, enables on‑prem/smaller‑scale runs, and increases contributor velocity.\r\n\r\n2. Goals & Non‑Goals\r\nGoals\r\n\r\nModularized design: clear boundary between GPU and TPU\r\n\r\nParity path: Run the full Tunix SFT + RL stack on single- and multi‑GPU via XLA:GPU (PJRT), starting from unit tests to the notebook/script examples: https://github.com/google/tunix/tree/main/examples\r\n\r\nPerformance-minded: Competitive throughput/latency using bf16/fp16, Flash‑Attention, and fused optimizers.\r\n\r\nSimple install: Docker and Conda instructions; reproducible envs for CUDA 12.x/13.x + cuDNN 9 or ROCm.\r\n\r\nCI coverage: Smoke tests on single‑GPU; nightly correctness on multi‑GPU via self-hosted runners.\r\n\r\nDocs: Clear “Getting Started on GPU” & troubleshooting.\r\n\r\nNon‑Goals\r\n\r\nNon‑JAX training backends (e.g., PyTorch) for core Tunix trainers.\r\n\r\nPerfect performance parity with TPU on day one.\r\n\r\n3. User Stories\r\n\r\nUS1 (Single‑GPU dev): A researcher with a 4090 runs SFT and minimal GRPO locally.\r\n\r\nUS2 (Multi‑GPU node): A lab with 8xH100 trains 1B–30B using FSDP+TP.\r\n\r\nUS3 (Multi‑host): A cluster with multiple H100 nodes runs distributed RL with NCCL over InfiniBand/RoCE.\r\n\r\nUS4 (Eval/Serve): Run RL learning and eval loops on GPU without TPU dependencies.\r\n\r\n4. Requirements\r\n\r\nR1: Support CUDA 12/13; cuDNN 9.x.\r\n\r\nR2: Support bf16 on Ampere/Hopper; fp16 fallback on consumer GPUs if needed.\r\n\r\nR3: PJRT runtime on XLA:GPU; NCCL collectives for dp/fsdp/tp.\r\n\r\nR4: Flash‑Attention path (jax-labs/pallas or vendor kernels) for attention-heavy models.\r\n\r\nR5: CI smoke tests on single GPU; perf sanity benchmarks; correctness parity on small models.",
      "created_at": "2025-11-08T23:14:03Z",
      "updated_at": "2025-11-11T00:31:06Z",
      "category": {
        "name": "Ideas",
        "emoji": ":bulb:"
      },
      "answer": null,
      "user": {
        "login": "wang2yn84",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4"
      }
    },
    {
      "id": "D_kwDOOTDVN84AiytZ",
      "number": 706,
      "title": "RFC: Multi-Controller JAX (McJAX) Support for Tunix",
      "body": "**Status:** Draft  for community feedback\r\n**Authors:** Lance Wang @wang2yn84 \r\n\r\n---\r\n\r\n## 1. Motivation\r\n\r\nTunix currently leverages [**Pathways on Cloud**](https://docs.cloud.google.com/ai-hypercomputer/docs/workloads/pathways-on-cloud/pathways-intro) for multi-host training, which offers robust distributed runtime and TPU support. However, there are strong reasons to add **Multi-Controller JAX (McJAX)** as an alternative multi-host backend:\r\n\r\n1. **TRC Compatibility:** Google’s [**TRC (Tensor Research Cloud)**](https://sites.research.google/trc/about/) clusters do not support GKE/Pathways setups, but do support McJAX.  \r\n2. **Broader Familiarity:** Many open-source and academic users already use McJAX for distributed runs (via SSH or Slurm launchers).  \r\n3. **Open Availability:** Pathways is not yet fully open-sourced, , limiting reproducibility for non-Google users.  \r\n\r\nAdding McJAX support enables Tunix to run seamlessly on **TPUs, GPUs, and CPUs** in **multi-host environments** without relying on GKE or proprietary infra.\r\n\r\n---\r\n\r\n## 2. Goals & Non-Goals\r\n\r\n### Goals\r\n- Provide **multi-host training** for Tunix using **McJAX**, supporting both **TPU** and **GPU** platforms.\r\n- Maintain **API compatibility** with existing Pathways code (resharding API).\r\n- Offer **launcher scripts** for SSH and Slurm clusters (e.g., TRC).\r\n- Support **fault-tolerant checkpointing** via Orbax for McJAX topologies.\r\n- Ensure **interoperability** — Pathways and McJAX can co-exist via environment flag.\r\n\r\n### Non-Goals\r\n- Re-implement Pathways runtime features such as autoscaling or elastic jobs.  \r\n- Guarantee full feature parity across all hardware configurations at day one.\r\n\r\n---\r\n\r\n## 3. Background\r\n\r\n- **Pathways** provides a cloud-native single-controller runtime, integrating with GKE and TPU VM topologies. It’s widely used internally but has limited public availability.\r\n- **McJAX** is a simpler, open alternative for distributed JAX training across multiple controllers, communicating over **gRPC** or  **RDMA** or **NCCL**.\r\n\r\n---\r\n\r\n## 4 Implementation Phases\r\n- **M0 | Identify the suitable library for distributed system handling\r\n- **M1 | McJAX env prototype on single host | Launch single controller successfully\r\n- **M2 | 2-host TPU v5e-8 | Verify distributed Jax works\r\n- **M3 | End-to-end SFT training\r\n- **M4 | Multi-host GRPO | Verify reward aggregation & gradients\r\n- **M5 | Orbax distributed checkpointing | Reliable recovery\r\n- **M6 | Public Docker + Docs | Release setup guide for TRC and Slurm\r\n",
      "created_at": "2025-11-08T23:41:47Z",
      "updated_at": "2025-11-08T23:41:48Z",
      "category": {
        "name": "Ideas",
        "emoji": ":bulb:"
      },
      "answer": null,
      "user": {
        "login": "wang2yn84",
        "avatar_url": "https://avatars.githubusercontent.com/u/13134832?v=4"
      }
    },
    {
      "id": "D_kwDOOTDVN84Ais14",
      "number": 659,
      "title": "Running GRPO training on Gemma 2 2B-IT",
      "body": "Hi guys!\r\n\r\nMy name is Ram Rachum, and I'm a research intern at CHAI, UCB. I'm working on research on RL explainability, and I want to use Tunix as case study.\r\n\r\nI'm trying to replicate your GPRO training of Gemma 2 2B-IT. I ran your `grpo_demo.ipynb` notebook on a v5litepod-4 machine on GCP. I had to stop it because it was filling the entire browser with output, and Jupyter isn't very good in handling that.\r\n\r\nQuestions:\r\n\r\n1. I understand that you ran this on `v5litepod-8`. How long did running the entire notebook take?\r\n2. Do you think this would run on `v5litepod-4`? I'm still waiting for GCP staff to allow me to use `v5litepod-8`. If you have any way to help with, or could connect me to a program that grants GCP compute credits, that would be helpful.\r\n\r\nI already ran a simplified version of `grpo_demo.ipynb` locally on my RTX 5080, but I could not get it to improve the GSM8K score of any LLM.",
      "created_at": "2025-11-01T21:39:06Z",
      "updated_at": "2025-11-05T10:28:12Z",
      "category": {
        "name": "Q&A",
        "emoji": ":pray:"
      },
      "answer": {
        "id": "DC_kwDOOTDVN84A4u5J",
        "body": "The notebook should be finished in around 1 hour on `v5litepod-4`."
      },
      "user": {
        "login": "cool-RR",
        "avatar_url": "https://avatars.githubusercontent.com/u/56778?u=3ec6c1c47cb6b10fc1c9371f8ff65ebf69d13672&v=4"
      }
    },
    {
      "id": "D_kwDOOTDVN84AhSzE",
      "number": 197,
      "title": "Does tunix support multi-host training?",
      "body": "Does tunix support training on Cloud TPU slice like v5p-256?",
      "created_at": "2025-08-14T07:19:56Z",
      "updated_at": "2025-10-24T01:28:48Z",
      "category": {
        "name": "General",
        "emoji": ":speech_balloon:"
      },
      "answer": null,
      "user": {
        "login": "weirayao",
        "avatar_url": "https://avatars.githubusercontent.com/u/22192355?u=1dac08d15b8370b87753343747d03f32ee7ec7c9&v=4"
      }
    }
  ],
  "details": {
    "id": 959501623,
    "node_id": "R_kgDOOTDVNw",
    "name": "tunix",
    "full_name": "google/tunix",
    "private": false,
    "owner": {
      "login": "google",
      "id": 1342004,
      "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
      "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/google",
      "type": "Organization",
      "user_view_type": "public",
      "site_admin": false
    },
    "description": "A Lightweight LLM Post-Training Library",
    "fork": false,
    "url": "https://api.github.com/repos/google/tunix",
    "created_at": "2025-04-02T22:19:15Z",
    "updated_at": "2026-02-15T21:28:44Z",
    "pushed_at": "2026-02-17T10:58:30Z",
    "homepage": "",
    "size": 99707,
    "stargazers_count": 2155,
    "watchers_count": 2155,
    "language": "Python",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": false,
    "has_pages": false,
    "has_discussions": true,
    "forks_count": 239,
    "archived": false,
    "disabled": false,
    "open_issues_count": 148,
    "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="
    },
    "allow_forking": true,
    "is_template": false,
    "web_commit_signoff_required": false,
    "has_pull_requests": true,
    "pull_request_creation_policy": "all",
    "topics": {},
    "visibility": "public",
    "forks": 239,
    "open_issues": 148,
    "watchers": 2155,
    "default_branch": "main",
    "permissions": {
      "admin": false,
      "maintain": false,
      "push": false,
      "triage": false,
      "pull": true
    },
    "temp_clone_token": "",
    "custom_properties": {
      "ai_agent_config_bypass": "false",
      "ghss_scan_exemption": {
        "0": "direct-push"
      },
      "requires_action_scanning": "false",
      "requires_two_party_review": "false"
    },
    "organization": {
      "login": "google",
      "id": 1342004,
      "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
      "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/google",
      "type": "Organization",
      "user_view_type": "public",
      "site_admin": false
    },
    "network_count": 239,
    "subscribers_count": 19
  },
  "lastFetched": 1771350150862
}