Skip to content

SFT tools schema fix#252

Merged
pan-x-c merged 5 commits intoagentscope-ai:mainfrom
garyzhang99:dev/sft_tools_shema_fix
Sep 4, 2025
Merged

SFT tools schema fix#252
pan-x-c merged 5 commits intoagentscope-ai:mainfrom
garyzhang99:dev/sft_tools_shema_fix

Conversation

@garyzhang99
Copy link
Collaborator

Description

This PR addresses schema misalignment issues when reading SFT data in JSON format with Huggingface, particularly with columns like messages and tools containing dynamic content. When using Huggingface load_dataset to read JSON files, columns with different structures are auto-filled with null values, resulting in inconsistent schemas.

Checklist

Please check the following items before code is ready to be reviewed.

  • Code has passed all tests
  • Docstrings have been added/updated in Google Style
  • Documentation has been updated
  • Code is ready for review

@garyzhang99 garyzhang99 changed the title SFT tools shema fix SFT tools schema fix Sep 4, 2025
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @garyzhang99, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request resolves schema inconsistencies encountered when loading Supervised Fine-Tuning (SFT) data, particularly for dynamic 'messages' and 'tools' columns, using Huggingface's load_dataset. The changes involve adopting the JSON Lines format for data storage and enhancing the data formatter to intelligently parse these fields, ensuring consistent schema interpretation and preventing unintended null value auto-filling, thereby improving data loading reliability.

Highlights

  • SFT Data Schema Handling: Implemented robust parsing for 'messages' and 'tools' fields within the SFT data formatter, allowing them to be loaded as JSON strings to prevent schema misalignment issues when using Huggingface Datasets.
  • Data Format Transition: Replaced the traditional JSON test data file (.json) with a JSON Lines (.jsonl) file for SFT tools, providing a more consistent and reliable format for load_dataset when dealing with dynamic or varying schemas per record.
  • Documentation Update: Updated an example in the FAQ documentation to demonstrate the correct method for loading FSDP trainer checkpoints.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request effectively addresses the schema misalignment issue when loading SFT data with Huggingface by serializing the messages and tools fields into JSON strings. The changes to the test data and documentation are consistent with this approach. My main feedback is on improving the error handling in trinity/buffer/schema/formatter.py. Currently, a JSON decoding error is only logged, which allows the program to continue with invalid data, likely causing a less informative crash later. I've suggested raising an exception to ensure the process fails fast and clearly on malformed data.

@garyzhang99
Copy link
Collaborator Author

/unittest-module-trainer

@github-actions
Copy link

github-actions bot commented Sep 4, 2025

Summary

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Other ❓ Flaky 🍂 Duration ⏱️
16 15 0 1 0 0 1.2s

Skipped

Tests Status
tests/trainer/trainer_test.py::TestTrainerMultiModal::test_trainer skipped ⏭️

Tests

Test Name Status Flaky Duration
tests/trainer/trainer_test.py::TestTrainerCountdown_0_fsdp::test_trainer 138ms
tests/trainer/trainer_test.py::TestTrainerCountdown_1_megatron::test_trainer 313ms
tests/trainer/trainer_test.py::TestStepAheadAsyncRL::test_trainer 50ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_0_fsdp::test_trainer 44ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_1_fsdp2::test_trainer 45ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_2_fsdp::test_trainer 48ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_3_fsdp2::test_trainer 56ms
tests/trainer/trainer_test.py::TestTrainerSFTWarmupGSM8K::test_trainer 56ms
tests/trainer/trainer_test.py::TestTrainerDPO::test_trainer 31ms
tests/trainer/trainer_test.py::TestTrainerSFT::test_trainer 29ms
tests/trainer/trainer_test.py::TestTrainerToolsSFT::test_trainer_tools 30ms
tests/trainer/trainer_test.py::TestFullyAsyncMode_0_fsdp::test_fully_async_mode 67ms
tests/trainer/trainer_test.py::TestFullyAsyncMode_1_fsdp::test_fully_async_mode 66ms
tests/trainer/trainer_test.py::TestFullyAsyncMode_2_megatron::test_fully_async_mode 158ms
tests/trainer/trainer_test.py::TestTrainerMIX::test_trainer 57ms
tests/trainer/trainer_test.py::TestTrainerMultiModal::test_trainer ⏭️ 1ms

Github Test Reporter by CTRF 💚

@pan-x-c
Copy link
Collaborator

pan-x-c commented Sep 4, 2025

/unittest-module-buffer

@github-actions
Copy link

github-actions bot commented Sep 4, 2025

Summary

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Other ❓ Flaky 🍂 Duration ⏱️
24 24 0 0 0 0 70ms

Tests

Test Name Status Flaky Duration
tests/buffer/experience_pipeline_test.py::TestExperiencePipeline::test_experience_pipeline 11ms
tests/buffer/experience_storage_test.py::ExperienceStorageTest::test_sql_experience_buffer 3ms
tests/buffer/experience_storage_test.py::ExperienceStorageTest::test_sql_storage_0_sft 4ms
tests/buffer/experience_storage_test.py::ExperienceStorageTest::test_sql_storage_1_dpo 5ms
tests/buffer/file_test.py::TestFileBuffer::test_file_reader 1ms
tests/buffer/file_test.py::TestFileBuffer::test_file_writer 2ms
tests/buffer/formatter_test.py::TestFormatter::test_dpo_messages_formatter 1ms
tests/buffer/formatter_test.py::TestFormatter::test_dpo_plaintext_formatter 1ms
tests/buffer/formatter_test.py::TestFormatter::test_sft_messages_formatter 1ms
tests/buffer/formatter_test.py::TestFormatter::test_sft_plaintext_formatter 1ms
tests/buffer/formatter_test.py::TestFormatter::test_task_formatter 1ms
tests/buffer/queue_test.py::TestQueueBuffer::test_priority_queue_buffer_reuse 7ms
tests/buffer/queue_test.py::TestQueueBuffer::test_priority_queue_capacity 3ms
tests/buffer/queue_test.py::TestQueueBuffer::test_queue_buffer_0_queue 4ms
tests/buffer/queue_test.py::TestQueueBuffer::test_queue_buffer_1_priority_queue 4ms
tests/buffer/queue_test.py::TestQueueBuffer::test_queue_buffer_capacity 4ms
tests/buffer/reward_shaping_mapper_test.py::TestRewardShapingMapper::test_basic_usage 1ms
tests/buffer/sql_test.py::TestSQLBuffer::test_sql_buffer_read_write 4ms
tests/buffer/task_storage_test.py::TaskStorageTest::test_read_task_0 1ms
tests/buffer/task_storage_test.py::TaskStorageTest::test_read_task_1 3ms
tests/buffer/task_storage_test.py::TaskStorageTest::test_read_task_2 1ms
tests/buffer/task_storage_test.py::TaskStorageTest::test_read_task_3 2ms
tests/buffer/task_storage_test.py::TaskStorageTest::test_read_task_4 1ms
tests/buffer/task_storage_test.py::TaskStorageTest::test_read_task_5 3ms

Github Test Reporter by CTRF 💚

@pan-x-c
Copy link
Collaborator

pan-x-c commented Sep 4, 2025

/unittest-module-trainer

@github-actions
Copy link

github-actions bot commented Sep 4, 2025

Summary

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Other ❓ Flaky 🍂 Duration ⏱️
16 15 0 1 0 0 1.2s

Skipped

Tests Status
tests/trainer/trainer_test.py::TestTrainerMultiModal::test_trainer skipped ⏭️

Tests

Test Name Status Flaky Duration
tests/trainer/trainer_test.py::TestTrainerCountdown_0_fsdp::test_trainer 130ms
tests/trainer/trainer_test.py::TestTrainerCountdown_1_megatron::test_trainer 332ms
tests/trainer/trainer_test.py::TestStepAheadAsyncRL::test_trainer 62ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_0_fsdp::test_trainer 47ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_1_fsdp2::test_trainer 43ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_2_fsdp::test_trainer 50ms
tests/trainer/trainer_test.py::TestTrainerGSM8K_3_fsdp2::test_trainer 53ms
tests/trainer/trainer_test.py::TestTrainerSFTWarmupGSM8K::test_trainer 53ms
tests/trainer/trainer_test.py::TestTrainerDPO::test_trainer 31ms
tests/trainer/trainer_test.py::TestTrainerSFT::test_trainer 30ms
tests/trainer/trainer_test.py::TestTrainerToolsSFT::test_trainer_tools 29ms
tests/trainer/trainer_test.py::TestFullyAsyncMode_0_fsdp::test_fully_async_mode 68ms
tests/trainer/trainer_test.py::TestFullyAsyncMode_1_fsdp::test_fully_async_mode 65ms
tests/trainer/trainer_test.py::TestFullyAsyncMode_2_megatron::test_fully_async_mode 156ms
tests/trainer/trainer_test.py::TestTrainerMIX::test_trainer 58ms
tests/trainer/trainer_test.py::TestTrainerMultiModal::test_trainer ⏭️ 1ms

Github Test Reporter by CTRF 💚

@pan-x-c pan-x-c merged commit f79e203 into agentscope-ai:main Sep 4, 2025
2 checks passed
yaochaorui pushed a commit to yaochaorui/Trinity-RFT that referenced this pull request Sep 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments