|
import asyncio |
|
import json |
|
import time |
|
|
|
from datasets import load_dataset |
|
|
|
from lagent.agents.stream import AsyncAgentForInternLM, AsyncMathCoder |
|
from lagent.llms import INTERNLM2_META |
|
from lagent.llms.vllm_wrapper import AsyncVllmModel |
|
from lagent.prompts.parsers import ToolParser |
|
|
|
|
|
loop = asyncio.new_event_loop() |
|
asyncio.set_event_loop(loop) |
|
|
|
model = AsyncVllmModel( |
|
path='Qwen/Qwen2-7B-Instruct', |
|
meta_template=INTERNLM2_META, |
|
tp=1, |
|
top_k=1, |
|
temperature=1.0, |
|
stop_words=['<|im_end|>', '\n```\n'], |
|
max_new_tokens=1024, |
|
) |
|
|
|
|
|
print('-' * 80, 'interpreter', '-' * 80) |
|
|
|
ds = load_dataset('lighteval/MATH', split='test') |
|
problems = [item['problem'] for item in ds.select(range(50))] |
|
|
|
coder = AsyncMathCoder( |
|
llm=model, |
|
interpreter=dict( |
|
type='lagent.actions.AsyncIPythonInterpreter', max_kernels=200), |
|
output_format=ToolParser( |
|
'interpreter', |
|
template= |
|
('Integrate step-by-step reasoning and Python code to solve math problems ' |
|
'using the following guidelines:\n' |
|
'- Analyze the question and write jupyter code to solve the problem;\n' |
|
r"- Present the final result in LaTeX using a '\boxed{{}}' without any " |
|
'units. \n'), |
|
begin='\n```python\n', |
|
end='\n```\n')) |
|
|
|
tic = time.time() |
|
coros = [coder(query, session_id=i) for i, query in enumerate(problems)] |
|
res = loop.run_until_complete(asyncio.gather(*coros)) |
|
|
|
print('-' * 120) |
|
print(f'time elapsed: {time.time() - tic}') |
|
|
|
with open('./tmp_3.json', 'w') as f: |
|
json.dump([coder.get_steps(i) for i in range(len(res))], |
|
f, |
|
ensure_ascii=False, |
|
indent=4) |
|
|