{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":71932349,"defaultBranch":"master","name":"ray","ownerLogin":"ray-project","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-10-25T19:38:30.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/22125274?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1727598092.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"ee94228912a4ac23a9793c8b6e6de4e93c8d7cec","ref":"refs/heads/2.13","pushedAt":"2024-09-29T08:21:32.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Catch-Bull","name":"Jialing He","path":"/Catch-Bull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11995469?s=80&v=4"},"commit":{"message":"[Doc][KubeRay v1.1.0] Use KubeRay v1.1.0 in KubeRay-related docs (#44479) (#44503)\n\nCherry pick #44479\r\nSigned-off-by: Kai-Hsun Chen ","shortMessageHtmlLink":"[Doc][KubeRay v1.1.0] Use KubeRay v1.1.0 in KubeRay-related docs (#44479"}},{"before":null,"after":"1565f1c6be218eb7dbdcaff160e52d04e492937d","ref":"refs/heads/dependabot/npm_and_yarn/python/ray/dashboard/client/rollup-2.79.2","pushedAt":"2024-09-29T02:17:17.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump rollup from 2.79.1 to 2.79.2 in /python/ray/dashboard/client\n\nBumps [rollup](https://github.com/rollup/rollup) from 2.79.1 to 2.79.2.\n- [Release notes](https://github.com/rollup/rollup/releases)\n- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/rollup/rollup/compare/v2.79.1...v2.79.2)\n\n---\nupdated-dependencies:\n- dependency-name: rollup\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump rollup from 2.79.1 to 2.79.2 in /python/ray/dashboard/client"}},{"before":"b676d020fd4c6c8925502d4d0186af8a7b1e3365","after":"e07594e665574b0f03650ebaf4907c76121846c9","ref":"refs/heads/master","pushedAt":"2024-09-28T21:46:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sven1977","name":"Sven Mika","path":"/sven1977","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5839854?s=80&v=4"},"commit":{"message":"[RLlib] MultiAgentEnv API enhancements (related to defining obs-/action spaces for agents). (#47830)","shortMessageHtmlLink":"[RLlib] MultiAgentEnv API enhancements (related to defining obs-/acti…"}},{"before":"44bdd4db55e7cb32e5bb254a15c33259526c56b8","after":"b676d020fd4c6c8925502d4d0186af8a7b1e3365","ref":"refs/heads/master","pushedAt":"2024-09-28T15:15:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sven1977","name":"Sven Mika","path":"/sven1977","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5839854?s=80&v=4"},"commit":{"message":"[RLlib] Cleanup examples folder (vol 30): BC pretraining, then PPO finetuning (new API stack with RLModule checkpoints). (#47838)","shortMessageHtmlLink":"[RLlib] Cleanup examples folder (vol 30): BC pretraining, then PPO fi…"}},{"before":"c5033d6ad420b368878de00c9704e7360ad6bba0","after":"44bdd4db55e7cb32e5bb254a15c33259526c56b8","ref":"refs/heads/master","pushedAt":"2024-09-28T04:22:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rynewang","name":"Ruiyang Wang","path":"/rynewang","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/56065503?s=80&v=4"},"commit":{"message":"[core] Change many Ray ID logs to WithField. (#47844)\n\nUse structured logging by changing more `<< node_id` to use\r\n`.WithField(node_id)`. This is not intended to be a complete work, but\r\nit should cover most of the cases. We did the work for NodeID, WorkerID,\r\nActorID, JobID, TaskID, PlacementGroupID.\r\n\r\nSome logs have multiple IDs. To avoid confusion, for these we only use\r\nWithField(object_id) don't use WithField on either of the Node IDs.\r\n\r\nThis PR should have no change on Ray other than logs.\r\n\r\nSigned-off-by: Ruiyang Wang ","shortMessageHtmlLink":"[core] Change many Ray ID logs to WithField. (#47844)"}},{"before":"943df2071829984efb393081adb572b4f1d04476","after":"d1381b9d7f22f48f45e7e1d8420d91bacfd5d01e","ref":"refs/heads/issue-41648","pushedAt":"2024-09-28T01:46:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MengjinYan","name":"Mengjin Yan","path":"/MengjinYan","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8065093?s=80&v=4"},"commit":{"message":"Remove the merged files\n\nSigned-off-by: Mengjin Yan ","shortMessageHtmlLink":"Remove the merged files"}},{"before":null,"after":"943df2071829984efb393081adb572b4f1d04476","ref":"refs/heads/issue-41648","pushedAt":"2024-09-28T01:43:59.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"MengjinYan","name":"Mengjin Yan","path":"/MengjinYan","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8065093?s=80&v=4"},"commit":{"message":"Fix the path in the default grafana/prometheus config to consider the temp-dir\n\nSigned-off-by: Mengjin Yan ","shortMessageHtmlLink":"Fix the path in the default grafana/prometheus config to consider the…"}},{"before":"6d8953b9ebd3fe67f88af58aac1567b441e66beb","after":"c5033d6ad420b368878de00c9704e7360ad6bba0","ref":"refs/heads/master","pushedAt":"2024-09-28T01:03:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rkooo567","name":"SangBin Cho","path":"/rkooo567","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18510752?s=80&v=4"},"commit":{"message":"[core][experimental] Fix test_execution_schedule_gpu (#47753)\n\nPass a GPU tensor to execute, but it gets converted into a CPU tensor. The issue may be related to #46440.","shortMessageHtmlLink":"[core][experimental] Fix test_execution_schedule_gpu (#47753)"}},{"before":"29bb879ff6c5790c0a7ece079f3666dfa7387691","after":"6d8953b9ebd3fe67f88af58aac1567b441e66beb","ref":"refs/heads/master","pushedAt":"2024-09-27T17:34:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"richardliaw","name":"Richard Liaw","path":"/richardliaw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4529381?s=80&v=4"},"commit":{"message":"Support TPU Trillium in Ray (#47803)\n\nAdding support for TPU Trillium in Ray. \r\n\r\nTrillium differs from previous TPUs in the following ways:\r\n* Each host by default has 8 chips (previously 4)\r\n* Each chip has 1 core (previously 2)\r\n\r\nSigned-off-by: Richard Liu ","shortMessageHtmlLink":"Support TPU Trillium in Ray (#47803)"}},{"before":"1003da077936b2cbc944c1e05d6221824a59360b","after":"29bb879ff6c5790c0a7ece079f3666dfa7387691","ref":"refs/heads/master","pushedAt":"2024-09-27T17:07:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"raulchen","name":"Hao Chen","path":"/raulchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2883335?s=80&v=4"},"commit":{"message":"[Data] Make sure `num_gpus` provide to Ray Data is appropriately passed to `ray.remote` call (#47768)\n\nAddressing https://github.com/ray-project/ray/issues/47767\r\n\r\nAddresses:\r\n\r\n - Fixes `cached_remote_fn` to properly handle different arg-lists\r\n- Makes sure we pass static args to `ray.remote` ctor in\r\n`TaskPoolMapOperator`\r\n\r\n---------\r\n\r\nSigned-off-by: Alexey Kudinkin ","shortMessageHtmlLink":"[Data] Make sure num_gpus provide to Ray Data is appropriately pass…"}},{"before":"c9fa0464386fe4cd79a647e67cf6a37acdf96bde","after":"1003da077936b2cbc944c1e05d6221824a59360b","ref":"refs/heads/master","pushedAt":"2024-09-27T16:41:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jjyao","name":"Jiajun Yao","path":"/jjyao","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/898023?s=80&v=4"},"commit":{"message":"[Core] Fix object reconstruction hang on arguments pending creation (#47645)\n\nSigned-off-by: Jiajun Yao ","shortMessageHtmlLink":"[Core] Fix object reconstruction hang on arguments pending creation (#…"}},{"before":"6b44557bd6abfeb733f418b5eff8012caa8c4cdd","after":"c9fa0464386fe4cd79a647e67cf6a37acdf96bde","ref":"refs/heads/master","pushedAt":"2024-09-27T15:31:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sven1977","name":"Sven Mika","path":"/sven1977","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5839854?s=80&v=4"},"commit":{"message":"[RLlib] Discontinue support for \"hybrid\" API stack (using RLModule + Learner, but still on RolloutWorker and Policy) (#46085)","shortMessageHtmlLink":"[RLlib] Discontinue support for \"hybrid\" API stack (using RLModule + …"}},{"before":"1d4c46d738018743d0aa6f001696a655f7293baf","after":"4856fda9f998d27ece08f8fabab6b9c07e6fce15","ref":"refs/heads/ak/grpc-srv-hndlr-fix","pushedAt":"2024-09-27T05:32:01.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"alexeykudinkin","name":"Alexey Kudinkin","path":"/alexeykudinkin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/428277?s=80&v=4"},"commit":{"message":"Fixed compilation\n\nSigned-off-by: Alexey Kudinkin ","shortMessageHtmlLink":"Fixed compilation"}},{"before":"50daf3a0bf7bc989e1737d5d74add092239b89ff","after":"1d4c46d738018743d0aa6f001696a655f7293baf","ref":"refs/heads/ak/grpc-srv-hndlr-fix","pushedAt":"2024-09-27T04:53:13.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"alexeykudinkin","name":"Alexey Kudinkin","path":"/alexeykudinkin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/428277?s=80&v=4"},"commit":{"message":"`lint`\n\nSigned-off-by: Alexey Kudinkin ","shortMessageHtmlLink":"lint"}},{"before":"dfc2157026d62fe20df9c557f1e1b79ee4e595ae","after":"50daf3a0bf7bc989e1737d5d74add092239b89ff","ref":"refs/heads/ak/grpc-srv-hndlr-fix","pushedAt":"2024-09-27T04:25:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"alexeykudinkin","name":"Alexey Kudinkin","path":"/alexeykudinkin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/428277?s=80&v=4"},"commit":{"message":"Tidying up\n\nSigned-off-by: Alexey Kudinkin ","shortMessageHtmlLink":"Tidying up"}},{"before":null,"after":"6b24e9dbf8b0b9f910a8a2e61baecb729b693938","ref":"refs/heads/akshay-anyscale-patch-1","pushedAt":"2024-09-27T02:16:58.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"akshay-anyscale","name":null,"path":"/akshay-anyscale","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/122416226?s=80&v=4"},"commit":{"message":"Update vllm_openai_example.py for compatibility with latest vllm\n\nSigned-off-by: akshay-anyscale <122416226+akshay-anyscale@users.noreply.github.com>","shortMessageHtmlLink":"Update vllm_openai_example.py for compatibility with latest vllm"}},{"before":"32854522848af045be1e113903cdb63461784785","after":"6b44557bd6abfeb733f418b5eff8012caa8c4cdd","ref":"refs/heads/master","pushedAt":"2024-09-26T23:34:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rynewang","name":"Ruiyang Wang","path":"/rynewang","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/56065503?s=80&v=4"},"commit":{"message":"[core] Introducing InstrumentedIOContextWithThread. (#47831)\n\nPreviously we had several ad-hoc places to do a \"thread and io_context\"\r\npattern: create a thread dedicated to an asio io_context, then workload\r\ncan post async tasks onto it. This makes duplicate code: everywhere we\r\ncreate threads, implement stop and join.\r\n\r\nIntroducing InstrumentedIOContextWithThread that does exactly this and\r\nreplaces existing usages.\r\n\r\nAlso fixes some absl::Time computations with best practice.\r\n\r\nThis is refactoring. Should have no runtime difference.\r\n\r\nSigned-off-by: Ruiyang Wang ","shortMessageHtmlLink":"[core] Introducing InstrumentedIOContextWithThread. (#47831)"}},{"before":"0fd043724f605f0d6a03cb9d32f76d26d14b849e","after":"32854522848af045be1e113903cdb63461784785","ref":"refs/heads/master","pushedAt":"2024-09-26T23:10:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rynewang","name":"Ruiyang Wang","path":"/rynewang","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/56065503?s=80&v=4"},"commit":{"message":"[core] move GetInternalConfig: NodeInfo -> InternalKV (#47755)\n\nEvery time GetInternalConfig reads from table_storage, but it's never\r\nmutated. Moves to internal kv as a simple in-mem get (no more read from\r\nredis). This itself should slightly update performance. But with #47736\r\nit should improve start up latency a lot in thousand-node clusters. In\r\ntheory we can remove it all for good, instead just put it as an\r\nInternalKV entry. but let's do things step by step.\r\n\r\nSigned-off-by: Ruiyang Wang \r\nSigned-off-by: Ruiyang Wang <56065503+rynewang@users.noreply.github.com>","shortMessageHtmlLink":"[core] move GetInternalConfig: NodeInfo -> InternalKV (#47755)"}},{"before":"a157bd8edf43f2120f985fe12192ddbaeb82a07b","after":"0fd043724f605f0d6a03cb9d32f76d26d14b849e","ref":"refs/heads/master","pushedAt":"2024-09-26T22:34:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jjyao","name":"Jiajun Yao","path":"/jjyao","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/898023?s=80&v=4"},"commit":{"message":"[Core] Fix null start_time for ray list jobs --detail (#47828)\n\nSigned-off-by: Jiajun Yao ","shortMessageHtmlLink":"[Core] Fix null start_time for ray list jobs --detail (#47828)"}},{"before":"f15347e3d1ddcdbddafafcebd752fa291b5be4be","after":null,"ref":"refs/heads/issue-44541-1","pushedAt":"2024-09-26T17:53:00.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jjyao","name":"Jiajun Yao","path":"/jjyao","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/898023?s=80&v=4"}},{"before":"d8d9f6b5849a8e21a7f20892043903a2a947e417","after":"a157bd8edf43f2120f985fe12192ddbaeb82a07b","ref":"refs/heads/master","pushedAt":"2024-09-26T17:52:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jjyao","name":"Jiajun Yao","path":"/jjyao","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/898023?s=80&v=4"},"commit":{"message":"[Core] Fix a Typo in dict_to_state function parameter name (#47822)\n\nSigned-off-by: Mengjin Yan ","shortMessageHtmlLink":"[Core] Fix a Typo in dict_to_state function parameter name (#47822)"}},{"before":"63233ecfb360e92c6d89aba2139285643258271a","after":"d8d9f6b5849a8e21a7f20892043903a2a947e417","ref":"refs/heads/master","pushedAt":"2024-09-26T17:33:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sven1977","name":"Sven Mika","path":"/sven1977","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5839854?s=80&v=4"},"commit":{"message":"[RLlib; Offline RL] Add docstrings to 'MARWIL'. (#47157)","shortMessageHtmlLink":"[RLlib; Offline RL] Add docstrings to 'MARWIL'. (#47157)"}},{"before":"73d684966545212863066774e24e3ff27fa19450","after":"f15347e3d1ddcdbddafafcebd752fa291b5be4be","ref":"refs/heads/issue-44541-1","pushedAt":"2024-09-26T16:36:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MengjinYan","name":"Mengjin Yan","path":"/MengjinYan","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8065093?s=80&v=4"},"commit":{"message":"fix the comment\n\nSigned-off-by: Mengjin Yan ","shortMessageHtmlLink":"fix the comment"}},{"before":"eebfdc2148bbc601e0d6e11f8f8b50c7717b34c6","after":"63233ecfb360e92c6d89aba2139285643258271a","ref":"refs/heads/master","pushedAt":"2024-09-26T15:32:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sven1977","name":"Sven Mika","path":"/sven1977","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5839854?s=80&v=4"},"commit":{"message":"[RLlib; new API stack by default] Switch on new API stack by default for SAC and DQN. (#47217)","shortMessageHtmlLink":"[RLlib; new API stack by default] Switch on new API stack by default …"}},{"before":"80c2a429706c0002aa7776a9aab6afd012a2eea8","after":"eebfdc2148bbc601e0d6e11f8f8b50c7717b34c6","ref":"refs/heads/master","pushedAt":"2024-09-26T12:25:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sven1977","name":"Sven Mika","path":"/sven1977","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5839854?s=80&v=4"},"commit":{"message":"[RLlib; docs] New API stack migration guide. (#47779)","shortMessageHtmlLink":"[RLlib; docs] New API stack migration guide. (#47779)"}},{"before":"1db9e56cc8f1bcf7c033d6fd8ed563ec4dd69a98","after":"73d684966545212863066774e24e3ff27fa19450","ref":"refs/heads/issue-44541-1","pushedAt":"2024-09-26T00:04:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"MengjinYan","name":"Mengjin Yan","path":"/MengjinYan","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8065093?s=80&v=4"},"commit":{"message":"lint fix\n\nSigned-off-by: Mengjin Yan ","shortMessageHtmlLink":"lint fix"}},{"before":null,"after":"1db9e56cc8f1bcf7c033d6fd8ed563ec4dd69a98","ref":"refs/heads/issue-44541-1","pushedAt":"2024-09-25T23:59:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"MengjinYan","name":"Mengjin Yan","path":"/MengjinYan","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8065093?s=80&v=4"},"commit":{"message":"Fix a typo\n\nSigned-off-by: Mengjin Yan ","shortMessageHtmlLink":"Fix a typo"}},{"before":"cb2376b9a4b4f7f56538abab8ef68746372011c3","after":null,"ref":"refs/heads/issue-44541","pushedAt":"2024-09-25T23:47:39.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"rynewang","name":"Ruiyang Wang","path":"/rynewang","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/56065503?s=80&v=4"}},{"before":"7966130b2f5c011fd1241006e3bc00c43efda1ec","after":"80c2a429706c0002aa7776a9aab6afd012a2eea8","ref":"refs/heads/master","pushedAt":"2024-09-25T23:47:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rynewang","name":"Ruiyang Wang","path":"/rynewang","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/56065503?s=80&v=4"},"commit":{"message":"[Core] Separate the attempt_number with the task_status in memory summary and object list (#47818)\n\n# Current status:\r\n* When we retrieve the information from GCS, the task_status as well as\r\nthe attempts are in 2 fields and the task status is an enum.\r\n* Later during reconstruction, the 2 fields are combined into 1 and the\r\nnumber of attempts is added to the task_status field.\r\n* That's why when displaying the objects, the function isn't able to\r\nconvert the string back to enum.\r\n\r\n# Proposed solution:\r\n* Instead of combining the 2 fields (task_status and attempt), we will\r\nkeep the 2 fields and added an additional field (attempt_number) in the\r\nObject State\r\n* In this way, we will keep the task_status as enum and put the attempt\r\nnumber information in a different field\r\n# Changes in this PR:\r\n* Added the `attempt_number` in `ObjectState` and\r\n`task_attempt_number_counts` in `ObjectSummaryPerKey`\r\n * Added logic to populate the fields as proposed above\r\n* Updated the logic for the memory summary function to display the\r\nattempt number in a new column\r\n * Corresponding tests added as well\r\n\r\nSigned-off-by: Mengjin Yan ","shortMessageHtmlLink":"[Core] Separate the attempt_number with the task_status in memory sum…"}},{"before":"a5f82e110c380d8d067a673e5492ba1c5041d5d9","after":"7966130b2f5c011fd1241006e3bc00c43efda1ec","ref":"refs/heads/master","pushedAt":"2024-09-25T19:50:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sven1977","name":"Sven Mika","path":"/sven1977","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5839854?s=80&v=4"},"commit":{"message":"[RLlib] Fix action masking example. (#47817)","shortMessageHtmlLink":"[RLlib] Fix action masking example. (#47817)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yOVQwODoyMTozMi4wMDAwMDBazwAAAATDw0KO","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNVQxOTo1MDo1Ny4wMDAwMDBazwAAAATAvSvP"}},"title":"Activity · ray-project/ray"}