Skip to content

Conversation

@pan-x-c
Copy link
Collaborator

@pan-x-c pan-x-c commented Jul 15, 2025

Description

Use ModelWrapper to record the model API call history and automatically generate Experience data from it.
This can reduce the difficulty of writing Workflows.

client = model_wrapper.get_openai_client()
# run some agent app with the client via client.chat.completions.create
exps = model_wrapper.extract_experience_from_history()
  • use async vllm model by default, and remove the sync one.
  • record generate/chat history
  • record openai.OpenAI.chat.completions.create history
  • generate Experience list from history data

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

@pan-x-c
Copy link
Collaborator Author

pan-x-c commented Jul 16, 2025

/run-unittest

@pan-x-c pan-x-c changed the title [WIP] ModelWrapper automatically record Experience ModelWrapper automatically record Experience Jul 16, 2025
@github-actions
Copy link

Summary

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Other ❓ Flaky 🍂 Duration ⏱️
50 50 0 0 0 0 1.4s

Tests

Test Name Status Flaky Duration
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_dpo_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_mix_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_opmd_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_ppo_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_sft_policy_loss 1ms
tests/buffer/file_test.py::TestFileBuffer::test_file_buffer 3ms
tests/buffer/file_test.py::TestFileBuffer::test_file_reader 1ms
tests/buffer/file_test.py::TestFileBuffer::test_file_writer 2ms
tests/buffer/queue_test.py::TestQueueBuffer::test_priority_queue_buffer_reuse 6ms
tests/buffer/queue_test.py::TestQueueBuffer::test_priority_queue_capacity 2ms
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/sql_test.py::TestSQLBuffer::test_create_sql_buffer 5ms
tests/common/config_test.py::TestConfig::test_all_examples_are_valid 1ms
tests/common/config_test.py::TestConfig::test_load_default_config 8ms
tests/common/experience_test.py::TestExperienceConversion::test_batch_conversion 1ms
tests/common/experience_test.py::TestExperienceConversion::test_experience_model_experience_conversion 1ms
tests/common/vllm_test.py::TestModelWrapperAsyncV0::test_generate 44ms
tests/common/vllm_test.py::TestModelWrapperAsyncTPV0::test_generate 54ms
tests/common/vllm_test.py::TestModelWrapperAsyncTPV1::test_generate 56ms
tests/common/vllm_test.py::TestModelWrapperAsyncV1::test_generate 42ms
tests/common/vllm_test.py::TestAPIServer::test_api 27ms
tests/common/vllm_test.py::TestTokenizer::test_assistant_token_mask 1ms
tests/explorer/explorer_test.py::BaseExplorerCase::test_explorer 1ms
tests/explorer/explorer_test.py::TestExplorerCountdownEval::test_explorer 89ms
tests/explorer/explorer_test.py::TestExplorerCountdownNoEval::test_explorer 89ms
tests/explorer/scheduler_test.py::SchedulerTest::test_concurrent_operations 5ms
tests/explorer/scheduler_test.py::SchedulerTest::test_get_results 21ms
tests/explorer/scheduler_test.py::SchedulerTest::test_scheduler_all_methods 15ms
tests/explorer/scheduler_test.py::SchedulerTest::test_scheduler_restart_after_stop 9ms
tests/explorer/scheduler_test.py::SchedulerTest::test_split_tasks 8ms
tests/explorer/scheduler_test.py::SchedulerTest::test_wait_all 8ms
tests/explorer/scheduler_test.py::SchedulerTest::test_wait_all_timeout_with_multi_batch 14ms
tests/explorer/workflow_test.py::WorkflowTest::test_gsm8k_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_boxed_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_complex_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_fraction_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_rm_gallery_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_workflow_resettable 1ms
tests/trainer/trainer_test.py::BaseTrainerCase::test_trainer 1ms
tests/trainer/trainer_test.py::TestTrainerCountdown::test_trainer 301ms
tests/trainer/trainer_test.py::TestStepAheadAsyncRL::test_trainer 94ms
tests/trainer/trainer_test.py::TestTrainerGSM8K::test_trainer 71ms
tests/trainer/trainer_test.py::TestTrainerSFTWarmupGSM8K::test_trainer 85ms
tests/trainer/trainer_test.py::TestTrainerDPO::test_trainer 47ms
tests/trainer/trainer_test.py::TestFullyAsyncMode::test_fully_async_mode_0_queue 104ms
tests/trainer/trainer_test.py::TestFullyAsyncMode::test_fully_async_mode_1_priority_queue 104ms
tests/utils/plugin_test.py::TestPluginLoader::test_load_plugins 5ms

Github Test Reporter by CTRF 💚

@pan-x-c
Copy link
Collaborator Author

pan-x-c commented Jul 17, 2025

/run-unittest

@github-actions
Copy link

Summary

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Other ❓ Flaky 🍂 Duration ⏱️
51 51 0 0 0 0 1.3s

Tests

Test Name Status Flaky Duration
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_dpo_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_mix_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_opmd_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_ppo_policy_loss 1ms
tests/algorithm/policy_loss_test.py::VerlPolicyLossTest::test_sft_policy_loss 1ms
tests/buffer/file_test.py::TestFileBuffer::test_file_buffer 3ms
tests/buffer/file_test.py::TestFileBuffer::test_file_reader 1ms
tests/buffer/file_test.py::TestFileBuffer::test_file_writer 2ms
tests/buffer/queue_test.py::TestQueueBuffer::test_priority_queue_buffer_reuse 7ms
tests/buffer/queue_test.py::TestQueueBuffer::test_priority_queue_capacity 2ms
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/sql_test.py::TestSQLBuffer::test_create_sql_buffer 4ms
tests/common/config_test.py::TestConfig::test_all_examples_are_valid 1ms
tests/common/config_test.py::TestConfig::test_load_default_config 5ms
tests/common/experience_test.py::TestExperienceConversion::test_batch_conversion 1ms
tests/common/experience_test.py::TestExperienceConversion::test_experience_model_experience_conversion 1ms
tests/common/vllm_test.py::ModelWrapperTest_0::test_generate 43ms
tests/common/vllm_test.py::ModelWrapperTest_1::test_generate 55ms
tests/common/vllm_test.py::ModelWrapperTest_2::test_generate 55ms
tests/common/vllm_test.py::ModelWrapperTest_3::test_generate 42ms
tests/common/vllm_test.py::ModelWrapperTest_4::test_generate 54ms
tests/common/vllm_test.py::TestAPIServer::test_api 32ms
tests/common/vllm_test.py::TestTokenizer::test_assistant_token_mask 1ms
tests/explorer/explorer_test.py::BaseExplorerCase::test_explorer 1ms
tests/explorer/explorer_test.py::TestExplorerCountdownEval::test_explorer 91ms
tests/explorer/explorer_test.py::TestExplorerCountdownNoEval::test_explorer 105ms
tests/explorer/scheduler_test.py::SchedulerTest::test_concurrent_operations 5ms
tests/explorer/scheduler_test.py::SchedulerTest::test_get_results 21ms
tests/explorer/scheduler_test.py::SchedulerTest::test_scheduler_all_methods 15ms
tests/explorer/scheduler_test.py::SchedulerTest::test_scheduler_restart_after_stop 9ms
tests/explorer/scheduler_test.py::SchedulerTest::test_split_tasks 8ms
tests/explorer/scheduler_test.py::SchedulerTest::test_wait_all 8ms
tests/explorer/scheduler_test.py::SchedulerTest::test_wait_all_timeout_with_multi_batch 14ms
tests/explorer/workflow_test.py::WorkflowTest::test_gsm8k_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_boxed_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_complex_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_fraction_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_math_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_rm_gallery_workflow 1ms
tests/explorer/workflow_test.py::WorkflowTest::test_workflow_resettable 1ms
tests/trainer/trainer_test.py::BaseTrainerCase::test_trainer 1ms
tests/trainer/trainer_test.py::TestTrainerCountdown::test_trainer 236ms
tests/trainer/trainer_test.py::TestStepAheadAsyncRL::test_trainer 98ms
tests/trainer/trainer_test.py::TestTrainerGSM8K::test_trainer 60ms
tests/trainer/trainer_test.py::TestTrainerSFTWarmupGSM8K::test_trainer 85ms
tests/trainer/trainer_test.py::TestTrainerDPO::test_trainer 44ms
tests/trainer/trainer_test.py::TestFullyAsyncMode::test_fully_async_mode_0_queue 103ms
tests/trainer/trainer_test.py::TestFullyAsyncMode::test_fully_async_mode_1_priority_queue 95ms
tests/utils/plugin_test.py::TestPluginLoader::test_load_plugins 5ms

Github Test Reporter by CTRF 💚

@chenyushuo chenyushuo merged commit 00f3b27 into modelscope:main Jul 17, 2025
2 checks passed
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