File size: 1,284 Bytes
7b47b6f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/env python3
import argparse
import json
from pathlib import Path
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from salmonn import AudioProcessor
from infer import generate
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--model_path", required=True)
parser.add_argument("--input", required=True)
parser.add_argument("--output", required=True)
parser.add_argument("--max_new_tokens", type=int, default=256)
args = parser.parse_args()
tokenizer = AutoTokenizer.from_pretrained(args.model_path)
model = AutoModelForCausalLM.from_pretrained(
args.model_path, trust_remote_code=True, dtype=torch.bfloat16, device_map="auto"
).eval()
if model.config.inject_temporal_embedding_nl:
model.register_nl_timestamp_tokenizer(tokenizer)
processor = AudioProcessor()
samples = json.loads(Path(args.input).read_text())
with Path(args.output).open("w", encoding="utf-8") as handle:
for sample in samples:
response = generate(model, tokenizer, processor, sample["audios"], sample["prompt"], args.max_new_tokens)
handle.write(json.dumps({**sample, "response": response}, ensure_ascii=False) + "\n")
if __name__ == "__main__":
main()
|