Spaces:
Sleeping
Sleeping
| # Varco Arena | |
| Varco Arena conducts tournaments between models to be compared for each test set command, ranking models accurately at an affordable price. This is more accurate and cost-effective than rating win rates by comparing against reference outputs. | |
| For more information, the followings may help understanding how it works. | |
| * [Paper](https://huggingface.co/papers/2411.01281) | |
| * [Blog Post (KR)](https://ncsoft.github.io/ncresearch/12cc62c1ea0d981971a8923401e8fe6a0f18563d) | |
| ## Quickstart | |
| ### Running Web Demo locally (streamlit, Recommended!) | |
| ```bash | |
| git clone [THIS_REPO] | |
| # install requirements below. we recommend miniforge to manage environment | |
| cd streamlit_app_local | |
| bash run.sh | |
| ``` | |
| For more details, see `[THIS_REPO]/streamlit_app_local/README.md` | |
| ### CLI use | |
| * located at | |
| * `varco_arena/` | |
| * debug configurations for vscode at | |
| * `varco_arena/.vscode` | |
| ```bash | |
| ## gpt-4o-mini as a judge | |
| python main.py -i "./some/dirpath/to/jsonl/files" -o SOME_REL_PATH_TO_CREATE -m tournament -e "gpt-4o-mini" | |
| ## vllm-openai served LLM as a judge | |
| python main.py -i "./some/dirpath/to/jsonl/files" -o SOME_REL_PATH_TO_CREATE -e SOME_MODEL_NAME_SERVED -m tournament -u "http://url_to/your/vllm_openai_server:someport" | |
| # dbg lines | |
| ## openai api judge dbg | |
| python main.py -i "rsc/inputs_for_dbg/dbg_400_error_inputs/" -o SOME_WANTED_TARGET_DIR -e gpt-4o-mini | |
| ## other testing lines | |
| python main.py -i "rsc/inputs_for_dbg/[SOME_DIRECTORY]/" -o SOME_WANTED_TARGET_DIR -e gpt-4o-mini | |
| ## dummy judge dbg (checking errors without api requests) | |
| python main.py -i "rsc/inputs_for_dbg/dbg_400_error_inputs/" -o SOME_WANTED_TARGET_DIR -e debug | |
| ``` | |
| ## Requirements | |
| We tested this on `python = 3.11.9` env: `requirements.txt` | |
| ``` | |
| openai>=1.17.0 | |
| munch | |
| pandas | |
| numpy | |
| tqdm>=4.48.0 | |
| plotly | |
| scikit-learn | |
| kaleido | |
| tiktoken>=0.7.0 | |
| pyyaml | |
| transformers | |
| streamlit>=1.40.2 | |
| openpyxl | |
| fire==0.6.0 | |
| git+https://github.com/shobrook/openlimit.git#egg=openlimit # do not install this by pypi | |
| # Linux | |
| uvloop | |
| # Windows | |
| winloop | |
| ``` | |
| #### Argument | |
| - -i, --input : directory path which contains input jsonlines files (llm outputs) | |
| - -o, --output_dir : directory where results to be put | |
| - -e, --evaluation : judge model specification (e.g. "gpt-4o-2024-05-13", "gpt-4o-mini", \[vllm-served-model-name\]) | |
| - -k, --openai_api_key : OpenAI API Key | |
| - -u, --openai_url: URL to openai_styled_llm_server (requested by openai sdk) | |
| #### advanced | |
| - -j, --n_jobs : n jobs to be put to `asyncio.semaphore(n=)` | |
| - -p, --evalprompt : [see the directory](./varco_arena/prompts/*.yaml) | |
| - -lr, --limit_requests : vLLM OpenAI server request limit (default: 7,680) | |
| - -lt, --limit_tokens : vLLM OpenAI server token limit (default: 15,728,640) | |
| #### Input Data Format | |
| [input jsonl guides](./streamlit_app_local/guide_mds/input_jsonls_en.md) | |
| ## Contributing & Customizing | |
| #### Do this after git clone and installation | |
| ```bash | |
| pip install pre-commit | |
| pre-commit install | |
| ``` | |
| #### before commit | |
| ```bash | |
| bash precommit.sh # black formatter will reformat the codes | |
| ``` | |
| ## FAQ | |
| * I want to apply my custom judge prompt to run Varco Arena | |
| * [`./varco_arena/prompts/`](./varco_arena/prompts/__init__.py) defines the prompts with `yaml` file and the class objects for those. Edit those as your need. | |
| * I want tailored judge prompts for each line of the test set row (i.e. ~100th row - `prompt1`, 101st~ - `prompt2`) | |
| * You could see `load_prompt` at the above link receives `promptname` + `task` as a parameters to load the prompt. The function is called at [`./varco_arena/manager.py:async_run`](./varco_arena/manager.py). | |
| * I want more fields for my llm outputs jsonl files for tailored use, i.e. want more fields beyond `instruction`, `source`, `generated`. | |
| * It's going to get tricky but let me briefly guide you about this. | |
| * You might have to edit `varco_arena/eval_utils.py`:`async_eval_w_prompt` (this part calls `PROMPT_OBJ.complete_prompt()`) | |
| * And all the related codes will require revision. | |
| ## Special Thanks to (contributors) | |
| - Minho Lee (@Dialogue Model Team, NCSOFT) [github](https://github.com/minolee/) | |
| - query wrapper | |
| - rag prompt | |
| - Jumin Oh (@Generation Model Team, NCSOFT) | |
| - overall prototyping of the system in haste | |
| ## Citation | |
| If you found our work helpful, consider citing our paper! | |
| ``` | |
| @misc{son2024varcoarenatournamentapproach, | |
| title={Varco Arena: A Tournament Approach to Reference-Free Benchmarking Large Language Models}, | |
| author={Seonil Son and Ju-Min Oh and Heegon Jin and Cheolhun Jang and Jeongbeom Jeong and Kuntae Kim}, | |
| year={2024}, | |
| eprint={2411.01281}, | |
| archivePrefix={arXiv}, | |
| primaryClass={cs.CL}, | |
| url={https://arxiv.org/abs/2411.01281}, | |
| } | |
| ``` | |