flexeval 0.17.2__tar.gz → 0.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. {flexeval-0.17.2 → flexeval-0.18.0}/PKG-INFO +6 -6
  2. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/hf_lm.py +31 -6
  3. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/openai_api.py +18 -9
  4. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/openai_batch_api.py +19 -8
  5. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/vllm_model.py +6 -2
  6. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/vllm_serve_lm.py +12 -1
  7. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/utils/hf_utils.py +14 -10
  8. {flexeval-0.17.2 → flexeval-0.18.0}/pyproject.toml +6 -6
  9. {flexeval-0.17.2 → flexeval-0.18.0}/LICENSE +0 -0
  10. {flexeval-0.17.2 → flexeval-0.18.0}/README.md +0 -0
  11. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/__init__.py +0 -0
  12. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/__init__.py +0 -0
  13. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/__init__.py +0 -0
  14. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/base.py +0 -0
  15. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench.py +0 -0
  16. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/README.md +0 -0
  17. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/mt-en-ref-gpt4.jsonl +0 -0
  18. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/mt-en.jsonl +0 -0
  19. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/mt-ja-ref-gpt4.jsonl +0 -0
  20. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/mt-ja-ref-gpt4o-with-human-annotation.jsonl +0 -0
  21. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/mt-ja.jsonl +0 -0
  22. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/rakuda-v2-ja.jsonl +0 -0
  23. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/vicuna-en-ref-gpt4.jsonl +0 -0
  24. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/vicuna-en.jsonl +0 -0
  25. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/vicuna-ja-ref-gpt4.jsonl +0 -0
  26. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/chatbot_bench_datasets/vicuna-ja.jsonl +0 -0
  27. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/openai_messages.py +0 -0
  28. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/sacrebleu_dataset.py +0 -0
  29. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/chat_dataset/template_based.py +0 -0
  30. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/eval_setups.py +0 -0
  31. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/evaluate_chat_response.py +0 -0
  32. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/evaluate_from_data.py +0 -0
  33. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/evaluate_generation.py +0 -0
  34. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/evaluate_multiple_choice.py +0 -0
  35. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/evaluate_pairwise.py +0 -0
  36. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/evaluate_perplexity.py +0 -0
  37. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/evaluate_reward_model.py +0 -0
  38. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/few_shot_generator/__init__.py +0 -0
  39. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/few_shot_generator/balanced.py +0 -0
  40. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/few_shot_generator/base.py +0 -0
  41. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/few_shot_generator/fixed.py +0 -0
  42. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/few_shot_generator/rand.py +0 -0
  43. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/generation_dataset/__init__.py +0 -0
  44. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/generation_dataset/base.py +0 -0
  45. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/generation_dataset/sacrebleu_dataset.py +0 -0
  46. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/generation_dataset/template_based.py +0 -0
  47. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/__init__.py +0 -0
  48. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/base.py +0 -0
  49. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/language_model/litellm_api.py +0 -0
  50. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/__init__.py +0 -0
  51. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/base.py +0 -0
  52. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/bleu.py +0 -0
  53. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/char_f1.py +0 -0
  54. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/code_eval.py +0 -0
  55. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/common_prefix_length.py +0 -0
  56. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/common_string_length.py +0 -0
  57. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/correlation.py +0 -0
  58. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/exact_match.py +0 -0
  59. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/finish_reason.py +0 -0
  60. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/llm_geval_score.py +0 -0
  61. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/llm_label.py +0 -0
  62. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/llm_score.py +0 -0
  63. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/math.py +0 -0
  64. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/output_length_stats.py +0 -0
  65. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/perspective_api.py +0 -0
  66. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/repetition_count.py +0 -0
  67. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/repetition_n.py +0 -0
  68. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/rouge.py +0 -0
  69. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/sari.py +0 -0
  70. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/substring_match.py +0 -0
  71. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/tool_call.py +0 -0
  72. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/utils.py +0 -0
  73. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/metric/xer.py +0 -0
  74. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/multiple_choice_dataset/__init__.py +0 -0
  75. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/multiple_choice_dataset/base.py +0 -0
  76. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/multiple_choice_dataset/template_based.py +0 -0
  77. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/__init__.py +0 -0
  78. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/judge/__init__.py +0 -0
  79. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/judge/base.py +0 -0
  80. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/judge/llm_judge.py +0 -0
  81. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/match.py +0 -0
  82. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/match_maker/__init__.py +0 -0
  83. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/match_maker/all_combinations.py +0 -0
  84. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/match_maker/base.py +0 -0
  85. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/match_maker/random_combinations.py +0 -0
  86. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/scorer/__init__.py +0 -0
  87. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/scorer/base.py +0 -0
  88. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/scorer/bradley_terry.py +0 -0
  89. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/pairwise_comparison/scorer/win_rate.py +0 -0
  90. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/prompt_template/__init__.py +0 -0
  91. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/prompt_template/base.py +0 -0
  92. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/prompt_template/jinja2.py +0 -0
  93. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reasoning_parser/__init__.py +0 -0
  94. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reasoning_parser/base.py +0 -0
  95. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reasoning_parser/regex_reasoning_parser.py +0 -0
  96. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/result_recorder/__init__.py +0 -0
  97. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/result_recorder/base.py +0 -0
  98. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/result_recorder/local_recorder.py +0 -0
  99. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/result_recorder/wandb_recorder.py +0 -0
  100. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_bench_dataset/__init__.py +0 -0
  101. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_bench_dataset/base.py +0 -0
  102. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_bench_dataset/template_based.py +0 -0
  103. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_model/__init__.py +0 -0
  104. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_model/base.py +0 -0
  105. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_model/log_prob.py +0 -0
  106. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_model/pairwise_judge_reward_model.py +0 -0
  107. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/reward_model/sequence_classification.py +0 -0
  108. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/__init__.py +0 -0
  109. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/aio.py +0 -0
  110. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/base.py +0 -0
  111. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/last_line.py +0 -0
  112. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/lower.py +0 -0
  113. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/mgsm.py +0 -0
  114. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/nfkc.py +0 -0
  115. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/regex.py +0 -0
  116. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/string_strip.py +0 -0
  117. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/string_processor/template.py +0 -0
  118. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/text_dataset/__init__.py +0 -0
  119. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/text_dataset/base.py +0 -0
  120. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/text_dataset/hf.py +0 -0
  121. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/text_dataset/jsonl.py +0 -0
  122. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tokenizer/__init__.py +0 -0
  123. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tokenizer/base.py +0 -0
  124. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tokenizer/mecab.py +0 -0
  125. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tokenizer/sacrebleu_tokenizer.py +0 -0
  126. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tokenizer/tiktoken_tokenizer.py +0 -0
  127. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tokenizer/transformers_tokenizer.py +0 -0
  128. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tokenizer/whitespace.py +0 -0
  129. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tool_parser/__init__.py +0 -0
  130. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/tool_parser/base.py +0 -0
  131. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/utils/__init__.py +0 -0
  132. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/utils/chat_util.py +0 -0
  133. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/utils/data_util.py +0 -0
  134. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/utils/jinja2_utils.py +0 -0
  135. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/core/utils/json_util.py +0 -0
  136. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/code_chat/mbpp_chat.jsonnet +0 -0
  137. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/code_generation/jhumaneval.jsonnet +0 -0
  138. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/code_generation/jhumaneval_tab_indent.jsonnet +0 -0
  139. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/code_generation/mbpp.jsonnet +0 -0
  140. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/code_generation/mbpp_tab_indent.jsonnet +0 -0
  141. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/code_generation/openai_humaneval.jsonnet +0 -0
  142. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/code_generation/openai_humaneval_tab_indent.jsonnet +0 -0
  143. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_chat/mt-en.jsonnet +0 -0
  144. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_chat/vicuna-en.jsonnet +0 -0
  145. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_generation/babi.jsonnet +0 -0
  146. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_generation/commonsense_qa.jsonnet +0 -0
  147. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_generation/gsm8k.jsonnet +0 -0
  148. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_generation/squad_v1.jsonnet +0 -0
  149. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_generation/trivia_qa.jsonnet +0 -0
  150. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_generation/twitter_sentiment.jsonnet +0 -0
  151. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_multiple_choice/arc_challenge.jsonnet +0 -0
  152. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_multiple_choice/arc_easy.jsonnet +0 -0
  153. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_multiple_choice/commonsense_qa_mc.jsonnet +0 -0
  154. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_multiple_choice/hellaswag.jsonnet +0 -0
  155. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_multiple_choice/openbookqa.jsonnet +0 -0
  156. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_multiple_choice/piqa.jsonnet +0 -0
  157. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_multiple_choice/xwinograd_en.jsonnet +0 -0
  158. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/en_perplexity/tiny_shakespeare.jsonnet +0 -0
  159. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_chat/aio_chat.jsonnet +0 -0
  160. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_chat/elyza_tasks_100.jsonnet +0 -0
  161. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_chat/mgsm_ja_chat.jsonnet +0 -0
  162. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_chat/mt-ja.jsonnet +0 -0
  163. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_chat/rakuda-v2-ja.jsonnet +0 -0
  164. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_chat/vicuna-ja.jsonnet +0 -0
  165. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/aio.jsonnet +0 -0
  166. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/jamcqa.jsonnet +0 -0
  167. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/jcommonsenseqa.jsonnet +0 -0
  168. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/jnli.jsonnet +0 -0
  169. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/jsquad.jsonnet +0 -0
  170. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/mgsm_ja.jsonnet +0 -0
  171. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/wrime_pos_neg.jsonnet +0 -0
  172. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_generation/xlsum_ja.jsonnet +0 -0
  173. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_multiple_choice/jcommonsenseqa_mc.jsonnet +0 -0
  174. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/ja_multiple_choice/xwinograd_ja.jsonnet +0 -0
  175. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/translation/wmt20_en_ja.jsonnet +0 -0
  176. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/translation/wmt20_ja_en.jsonnet +0 -0
  177. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/translation_chat/wmt20_en_ja_chat.jsonnet +0 -0
  178. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/EvalSetup/translation_chat/wmt20_ja_en_chat.jsonnet +0 -0
  179. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/Metric/assistant_eval_en_single_turn.jsonnet +0 -0
  180. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/Metric/assistant_eval_ja_single_turn.jsonnet +0 -0
  181. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/Metric/elyza_tasks_100_eval.jsonnet +0 -0
  182. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/PairwiseJudge/assistant_judge_en_single_turn.jsonnet +0 -0
  183. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/preset_configs/PairwiseJudge/assistant_judge_ja_single_turn.jsonnet +0 -0
  184. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/scripts/__init__.py +0 -0
  185. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/scripts/common.py +0 -0
  186. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/scripts/flexeval_file.py +0 -0
  187. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/scripts/flexeval_lm.py +0 -0
  188. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/scripts/flexeval_pairwise.py +0 -0
  189. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/scripts/flexeval_presets.py +0 -0
  190. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/scripts/flexeval_reward.py +0 -0
  191. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/utils/__init__.py +0 -0
  192. {flexeval-0.17.2 → flexeval-0.18.0}/flexeval/utils/module_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flexeval
3
- Version: 0.17.2
3
+ Version: 0.18.0
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: ryokan-ri
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3.12
13
13
  Provides-Extra: vllm
14
14
  Provides-Extra: wandb
15
15
  Requires-Dist: datasets (>=2.14.6,<3.0.0)
16
- Requires-Dist: evaluate (>=0.4.1,<0.5.0)
16
+ Requires-Dist: evaluate (>=0.4.6,<0.5.0)
17
17
  Requires-Dist: fuzzywuzzy (>=0.18.0,<0.19.0)
18
18
  Requires-Dist: google-api-python-client (>=2.131.0,<3.0.0)
19
19
  Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
@@ -22,8 +22,8 @@ Requires-Dist: jsonargparse[jsonnet] (>=4.26.1,<5.0.0)
22
22
  Requires-Dist: litellm (>=1.52.9,<2.0.0)
23
23
  Requires-Dist: loguru (>=0.7.2,<0.8.0)
24
24
  Requires-Dist: math-verify[antlr4-13-2] (>=0.7.0,<0.8.0)
25
- Requires-Dist: openai (>=1.52.2,<2.0.0)
26
- Requires-Dist: peft (>=0.10.0,<0.11.0)
25
+ Requires-Dist: openai (>=2.0.0,<3.0.0)
26
+ Requires-Dist: peft (>=0.19.1,<0.20.0)
27
27
  Requires-Dist: pyarrow (==16.1.0)
28
28
  Requires-Dist: python-levenshtein (>=0.23.0,<0.24.0)
29
29
  Requires-Dist: rouge (>=1.0.1,<2.0.0)
@@ -33,8 +33,8 @@ Requires-Dist: scipy (>=1.13.0,<2.0.0)
33
33
  Requires-Dist: smart-open (>=7.1.0,<8.0.0)
34
34
  Requires-Dist: sudachipy (>=0.6.10)
35
35
  Requires-Dist: tiktoken (>=0.9.0,<0.10.0)
36
- Requires-Dist: transformers[ja,sentencepiece,torch] (>=4.34.1,<5.0.0)
37
- Requires-Dist: vllm (==0.17.1) ; extra == "vllm"
36
+ Requires-Dist: transformers[ja,sentencepiece,torch] (>=5.5.3,<6)
37
+ Requires-Dist: vllm (==0.24.0) ; extra == "vllm"
38
38
  Requires-Dist: wandb (>=0.17.2,<0.18.0) ; extra == "wandb"
39
39
  Description-Content-Type: text/markdown
40
40
 
@@ -383,15 +383,36 @@ class HuggingFaceLM(LanguageModel):
383
383
 
384
384
  # We strip the input text and stop sequences from the output text.
385
385
  lm_outputs: list[LMOutput] = []
386
- for generated_tensor in generated_tokens:
386
+ for attention_mask, generated_tensor in zip(model_inputs["attention_mask"], generated_tokens):
387
387
  input_tensor = generated_tensor[:input_token_length]
388
388
  output_tensor = generated_tensor[input_token_length:]
389
389
 
390
- input_tokens = [t for t in input_tensor.tolist() if t != self.tokenizer.pad_token_id]
391
- output_tokens = [t for t in output_tensor.tolist() if t != self.tokenizer.pad_token_id]
390
+ # Use the attention mask (rather than filtering by `pad_token_id`) to strip the
391
+ # left-padding from the input, since `pad_token_id` may equal `eos_token_id` (the
392
+ # tokenizer has no native pad token), in which case a value-based filter would also
393
+ # strip genuine EOS tokens that are part of the actual prompt content.
394
+ input_tokens = [t for t, m in zip(input_tensor.tolist(), attention_mask.tolist()) if m != 0]
395
+
396
+ # Find where generation actually stopped: the first occurrence of a stop token id in
397
+ # the output. Everything from that point on (the stop token itself and the padding
398
+ # that follows it) is discarded. Note that `pad_token_id` may equal one of the
399
+ # `stop_token_ids` (when the tokenizer has no native pad token), so a value-based pad
400
+ # filter would incorrectly strip the genuine stop token as well, making it impossible
401
+ # to tell "stop" from "length" below.
402
+ stop_token_pos = next(
403
+ (i for i, t in enumerate(output_tensor.tolist()) if t in stop_token_ids),
404
+ None,
405
+ )
406
+ if stop_token_pos is not None:
407
+ finish_reason = "stop"
408
+ output_tokens = output_tensor[:stop_token_pos].tolist()
409
+ else:
410
+ finish_reason = "length"
411
+ # Fall back to filtering by `pad_token_id`, as a safety net for models with a
412
+ # dedicated pad token (distinct from eos) that may still pad the output.
413
+ output_tokens = [t for t in output_tensor.tolist() if t != self.tokenizer.pad_token_id]
392
414
  decoded_text = decode_for_lm_continuation(output_tokens, input_tokens, self.tokenizer)
393
415
 
394
- finish_reason = "length"
395
416
  for stop_seq in stop_sequences:
396
417
  idx = decoded_text.find(stop_seq)
397
418
  if idx != -1:
@@ -436,13 +457,17 @@ class HuggingFaceLM(LanguageModel):
436
457
  if lm_output.raw_text is None:
437
458
  lm_output.raw_text = lm_output.text
438
459
  reasoning = self.reasoning_parser(lm_output.text)
439
- lm_output.text = reasoning.text
460
+ # `reasoning.text` is None when the reasoning pattern fails to match.
461
+ # LMOutput.text must never be None (see LMOutput.__post_init__), so fall back to "".
462
+ lm_output.text = reasoning.text if reasoning.text is not None else ""
440
463
  lm_output.reasoning_text = reasoning.reasoning_text
441
464
 
442
465
  if self.tool_parser and tools is not None:
443
466
  parsed_tool_calling_message = self.tool_parser(lm_output.text)
444
467
  lm_output.tool_calls = parsed_tool_calling_message.tool_call_dicts
445
- lm_output.text = parsed_tool_calling_message.text
468
+ lm_output.text = (
469
+ parsed_tool_calling_message.text if parsed_tool_calling_message.text is not None else ""
470
+ )
446
471
  if lm_output.raw_text is None:
447
472
  lm_output.raw_text = parsed_tool_calling_message.raw_text
448
473
  lm_output.tool_call_validation_result = parsed_tool_calling_message.validation_result
@@ -226,7 +226,7 @@ class OpenAIChatAPI(LanguageModel):
226
226
  LMOutput(
227
227
  text=res.choices[0].message.content,
228
228
  reasoning_text=get_reasoning_text(res.choices[0].message),
229
- finish_reason=res.choices[0].finish_reason,
229
+ finish_reason="empty" if res is self.empty_response else res.choices[0].finish_reason,
230
230
  )
231
231
  for res in api_responses
232
232
  ]
@@ -246,7 +246,7 @@ class OpenAIChatAPI(LanguageModel):
246
246
  LMOutput(
247
247
  text=res.choices[0].message.content,
248
248
  reasoning_text=get_reasoning_text(res.choices[0].message),
249
- finish_reason=res.choices[0].finish_reason,
249
+ finish_reason="empty" if res is self.empty_response else res.choices[0].finish_reason,
250
250
  tool_calls=[tool_call.to_dict() for tool_call in res.choices[0].message.tool_calls]
251
251
  if res.choices[0].message.tool_calls
252
252
  else None,
@@ -295,17 +295,21 @@ class OpenAIChatAPI(LanguageModel):
295
295
  )
296
296
 
297
297
  log_probs = []
298
- top_logprobs_list = [res.choices[0].logprobs.content[0].top_logprobs for res in api_responses]
298
+ top_logprobs_list = [
299
+ None if res is self.empty_response else res.choices[0].logprobs.content[0].top_logprobs
300
+ for res in api_responses
301
+ ]
299
302
  for index, prompt in enumerate(prompt_list):
300
303
  target_token = response_contents[index]
301
304
  index_in_unique = unique_prompt_list.index(prompt)
302
305
 
303
- log_prob = None # if target token not in top_logprobs, return None for log_prob of the token
306
+ log_prob = None # if target token not in top_logprobs, or the request errored, return None
304
307
  top_logprobs = top_logprobs_list[index_in_unique]
305
- for token_logprob in top_logprobs:
306
- if token_logprob.token == target_token:
307
- log_prob = token_logprob.logprob
308
- break
308
+ if top_logprobs is not None:
309
+ for token_logprob in top_logprobs:
310
+ if token_logprob.token == target_token:
311
+ log_prob = token_logprob.logprob
312
+ break
309
313
  log_probs.append(log_prob)
310
314
 
311
315
  return log_probs
@@ -450,7 +454,12 @@ class OpenAICompletionAPI(LanguageModel):
450
454
  **kwargs,
451
455
  )
452
456
 
453
- return [LMOutput(text=res.choices[0].text, finish_reason=res.choices[0].finish_reason) for res in api_responses]
457
+ return [
458
+ LMOutput(text="", finish_reason="empty")
459
+ if res is self.empty_response
460
+ else LMOutput(text=res.choices[0].text, finish_reason=res.choices[0].finish_reason)
461
+ for res in api_responses
462
+ ]
454
463
 
455
464
  def __repr__(self) -> str:
456
465
  return f"{self.__class__.__name__}(model={self.model})"
@@ -257,7 +257,12 @@ class OpenAIChatBatchAPI(LanguageModel):
257
257
  **kwargs,
258
258
  )
259
259
  return [
260
- LMOutput(text=res["choices"][0]["message"]["content"], finish_reason=res["choices"][0]["finish_reason"])
260
+ LMOutput(text="", finish_reason="empty")
261
+ if isinstance(res, str)
262
+ else LMOutput(
263
+ text=res["choices"][0]["message"]["content"],
264
+ finish_reason=res["choices"][0]["finish_reason"],
265
+ )
261
266
  for res in api_responses
262
267
  ]
263
268
 
@@ -273,7 +278,9 @@ class OpenAIChatBatchAPI(LanguageModel):
273
278
  **kwargs,
274
279
  )
275
280
  return [
276
- LMOutput(
281
+ LMOutput(text="", finish_reason="empty")
282
+ if isinstance(res, str)
283
+ else LMOutput(
277
284
  text=res["choices"][0]["message"]["content"],
278
285
  finish_reason=res["choices"][0]["finish_reason"],
279
286
  tool_calls=res["choices"][0]["message"].get("tool_calls", None),
@@ -319,17 +326,21 @@ class OpenAIChatBatchAPI(LanguageModel):
319
326
  )
320
327
 
321
328
  log_probs = []
322
- top_logprobs_list = [res["choices"][0]["logprobs"]["content"][0]["top_logprobs"] for res in api_responses]
329
+ top_logprobs_list = [
330
+ None if isinstance(res, str) else res["choices"][0]["logprobs"]["content"][0]["top_logprobs"]
331
+ for res in api_responses
332
+ ]
323
333
  for index, prompt in enumerate(prompt_list):
324
334
  target_token = response_contents[index]
325
335
  index_in_unique = unique_prompt_list.index(prompt)
326
336
 
327
- log_prob = None # if target token not in top_logprobs, return None for log_prob of the token
337
+ log_prob = None # if target token not in top_logprobs, or the request errored, return None
328
338
  top_logprobs = top_logprobs_list[index_in_unique]
329
- for token_logprob in top_logprobs:
330
- if token_logprob["token"] == target_token:
331
- log_prob = token_logprob["logprob"]
332
- break
339
+ if top_logprobs is not None:
340
+ for token_logprob in top_logprobs:
341
+ if token_logprob["token"] == target_token:
342
+ log_prob = token_logprob["logprob"]
343
+ break
333
344
  log_probs.append(log_prob)
334
345
 
335
346
  return log_probs
@@ -284,13 +284,17 @@ class VLLM(LanguageModel):
284
284
  if lm_output.raw_text is None:
285
285
  lm_output.raw_text = lm_output.text
286
286
  reasoning = self.reasoning_parser(lm_output.text)
287
- lm_output.text = reasoning.text
287
+ # `reasoning.text` is None when the reasoning pattern fails to match.
288
+ # LMOutput.text must never be None (see LMOutput.__post_init__), so fall back to "".
289
+ lm_output.text = reasoning.text if reasoning.text is not None else ""
288
290
  lm_output.reasoning_text = reasoning.reasoning_text
289
291
 
290
292
  if self.tool_parser and tools is not None:
291
293
  parsed_tool_calling_message = self.tool_parser(lm_output.text)
292
294
  lm_output.tool_calls = parsed_tool_calling_message.tool_call_dicts
293
- lm_output.text = parsed_tool_calling_message.text
295
+ lm_output.text = (
296
+ parsed_tool_calling_message.text if parsed_tool_calling_message.text is not None else ""
297
+ )
294
298
  if lm_output.raw_text is None:
295
299
  lm_output.raw_text = parsed_tool_calling_message.raw_text
296
300
  lm_output.tool_call_validation_result = parsed_tool_calling_message.validation_result
@@ -106,6 +106,17 @@ class VLLMServerManager:
106
106
 
107
107
  interval_second = 1
108
108
  for _ in range(self.timeout // interval_second):
109
+ # Fail fast if the vLLM process disappears or exits while the server is starting.
110
+ if self.process is None:
111
+ msg = "vLLM server process is not initialized."
112
+ raise RuntimeError(msg)
113
+
114
+ returncode = self.process.poll()
115
+ if returncode is not None:
116
+ self.stop()
117
+ msg = f"vLLM server process terminated unexpectedly. {returncode=}"
118
+ raise RuntimeError(msg)
119
+
109
120
  if self.is_ready():
110
121
  logger.info(f"vLLM server is ready at {self.base_url}")
111
122
  return self.host, self.port
@@ -193,7 +204,7 @@ class VLLMServeLM(OpenAIChatAPI):
193
204
  logging.getLogger("httpx").setLevel(logging.WARNING)
194
205
  logging.getLogger("httpcore").setLevel(logging.WARNING)
195
206
  model_kwargs = model_kwargs or {}
196
- if "tensor_parallel_size" not in model_kwargs:
207
+ if "tensor_parallel_size" not in model_kwargs and "tensor-parallel-size" not in model_kwargs:
197
208
  model_kwargs["tensor_parallel_size"] = torch.cuda.device_count()
198
209
  self.manager = VLLMServerManager(model=model, model_kwargs=model_kwargs, timeout=booting_timeout)
199
210
  if api_headers is None:
@@ -29,7 +29,7 @@ def get_default_model_kwargs(model_kwargs: None | dict[str, Any] = None) -> dict
29
29
  """
30
30
  This provides a default set of model kwargs for initializing a model in flexeval.
31
31
  - It uses the "auto" device_map to use any available device (GPU, MPS, etc.).
32
- - It uses the "auto" torch_dtype to use the optimal dtype for the model.
32
+ - It uses the "auto" dtype to use the optimal dtype for the model.
33
33
  """
34
34
  model_kwargs = model_kwargs or {}
35
35
  model_kwargs = {**model_kwargs} # copy kwargs to avoid modifying the original dict
@@ -39,17 +39,21 @@ def get_default_model_kwargs(model_kwargs: None | dict[str, Any] = None) -> dict
39
39
  # If the macOS version is older than 14.0, we need to use "cpu" instead of "auto".
40
40
  # This is to avoid MPS-related issues on older macOS versions.
41
41
  model_kwargs["device_map"] = "cpu"
42
- if "torch_dtype" not in model_kwargs:
43
- # You need to set torch_dtype to use the optimal dtype for the model.
42
+ # `torch_dtype` was renamed to `dtype` in transformers v5. Keep accepting the old
43
+ # name so existing configs don't break.
44
+ if "torch_dtype" in model_kwargs:
45
+ model_kwargs["dtype"] = model_kwargs.pop("torch_dtype")
46
+ if "dtype" not in model_kwargs:
47
+ # You need to set dtype to use the optimal dtype for the model.
44
48
  # https://huggingface.co/docs/transformers/main/main_classes/model#model-instantiation-dtype
45
- model_kwargs["torch_dtype"] = "auto"
46
- elif model_kwargs["torch_dtype"] != "auto":
49
+ model_kwargs["dtype"] = "auto"
50
+ elif model_kwargs["dtype"] != "auto":
47
51
  # Convert string to torch.dtype
48
52
  # We allow either "bfloat16" or "torch.bfloat16"
49
- torch_dtype_str = model_kwargs["torch_dtype"]
50
- torch_dtype_str = torch_dtype_str.removeprefix("torch.")
51
- model_kwargs["torch_dtype"] = getattr(torch, torch_dtype_str)
52
- if not isinstance(model_kwargs["torch_dtype"], torch.dtype):
53
- msg = f"Invalid torch_dtype: {model_kwargs['torch_dtype']}"
53
+ dtype_str = model_kwargs["dtype"]
54
+ dtype_str = dtype_str.removeprefix("torch.")
55
+ model_kwargs["dtype"] = getattr(torch, dtype_str)
56
+ if not isinstance(model_kwargs["dtype"], torch.dtype):
57
+ msg = f"Invalid dtype: {model_kwargs['dtype']}"
54
58
  raise ValueError(msg)
55
59
  return model_kwargs
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "flexeval"
3
- version = "0.17.2" # This will be automatically set from git tag by poetry-dynamic-versioning
3
+ version = "0.18.0" # This will be automatically set from git tag by poetry-dynamic-versioning
4
4
  description = ""
5
5
  authors = ["ryokan-ri <ryokan.ri@sbintuitions.co.jp>"]
6
6
  readme = "README.md"
@@ -16,10 +16,10 @@ flexeval_presets = "flexeval.scripts.flexeval_presets:main"
16
16
 
17
17
  [tool.poetry.dependencies]
18
18
  python = ">=3.10,<3.13" # set version bound because we get "Unable to find installation candidates" with torch 2.5.1
19
- transformers = {extras = ["ja", "sentencepiece", "torch"], version = "^4.34.1"}
19
+ transformers = {extras = ["ja", "sentencepiece", "torch"], version = ">=5.5.3,<6"}
20
20
  datasets = "^2.14.6"
21
- evaluate = "^0.4.1"
22
- peft = "^0.10.0"
21
+ evaluate = "^0.4.6" # 0.4.1-0.4.5 call huggingface_hub's removed `HfFolder` API and break with huggingface_hub>=1.0
22
+ peft = "^0.19.1"
23
23
  jsonargparse = {extras = ["jsonnet"], version = "^4.26.1"}
24
24
  jinja2 = "^3.1.2"
25
25
  fuzzywuzzy = "^0.18.0"
@@ -27,9 +27,9 @@ python-levenshtein = "^0.23.0"
27
27
  rouge = "^1.0.1"
28
28
  sacrebleu = {extras = ["ja"], version = "^2.4.1"}
29
29
  jiwer = "^3.0.4"
30
- openai = "^1.52.2"
30
+ openai = ">=2.0.0,<3.0.0"
31
31
  google-api-python-client = "^2.131.0"
32
- vllm = {version = "0.17.1", optional = true }
32
+ vllm = {version = "0.24.0", optional = true }
33
33
  loguru = "^0.7.2"
34
34
  wandb = {version = "^0.17.2", optional = true}
35
35
  pyarrow = "16.1.0" # set the version because we get "Unable to find installation candidates" with 17.0.0
File without changes
File without changes