File size: 3,133 Bytes
9c6961c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import argparse
import os
import json
import sys
sys.path.append(os.path.abspath('/home/mshahidul/'))
from gpu_selection import _gpu_selection_
# 1. Argparse for path
parser = argparse.ArgumentParser(description="Translation Evaluation")
parser.add_argument("--path", type=str, default="/home/mshahidul/readctrl/generating_data/tik_ache/es_syntheticV3.json", help="Path to the JSON file")
parser.add_argument("--cuda", type=str, default="3", help="CUDA device id, e.g., '0' or '0,1' for multiple GPUs")
args = parser.parse_args()

if args.cuda is not None:
    os.environ["CUDA_VISIBLE_DEVICES"] = args.cuda
    print(f"🎮🎮 Using CUDA device: {args.cuda}")
else:
    _gpu_selection_()

# 2. Output directory and file
out_dir = "/home/mshahidul/readctrl/results/"
os.makedirs(os.path.dirname(out_dir), exist_ok=True)
file_name = os.path.basename(args.path)
out_path = os.path.join(out_dir, file_name)

# 3. Load already evaluated results if exist
results = []
completed_keys = set()
if os.path.exists(out_path):
    with open(out_path, "r", encoding="utf-8") as f:
        results = json.load(f)
    for r in results:
        completed_keys.add((r["article"], r["gold_summary"]))

# 4. Load dataset
with open(args.path, "r", encoding="utf-8") as f:
    dataset = json.load(f)
from unsloth import FastLanguageModel
import torch
# 5. Load model
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "/home/mshahidul/readctrl/finetuned_models/es_synthetic_data_creation_Qwen3_14B_v1",
    max_seq_length = 4092,
    load_in_4bit = True,
    load_in_8bit = False,
    full_finetuning = False,
)
from prompt_generate import generate_prompt
# 6. Evaluation loop
import tqdm
for item in tqdm.tqdm(dataset):
    key = (item["article"], item["gold_summary"])
    if key in completed_keys:
        continue

    for band in ["B1", "B2", "B3"]:
        prompt = generate_prompt(item['article'],item['gold_summary'],band,"es")

        messages = [{"role": "user", "content": prompt+"\n"}]
        text = tokenizer.apply_chat_template(
            messages,
            tokenize=False,
            add_generation_prompt=True,
            enable_thinking=False,
        )
        inputs = tokenizer(text, return_tensors="pt").to("cuda")
        output_ids = model.generate(
            **inputs,
            max_new_tokens=1000,
            temperature=0.1,
            top_p=0.8,
            top_k=5,
        )
        output_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
        #answer = output_text.split("</think>")[1].strip()

        results.append({
            "article": item["article"],
            "gold_summary": item["gold_summary"],
            "band": band,
            "lang": "es",
            "synthetic_summary": output_text,
        })
        completed_keys.add(key)
        # Save every 30 results
        if len(results) % 30 == 0:
            with open(out_path, "w", encoding="utf-8") as f:
                json.dump(results, f, ensure_ascii=False, indent=2)

# 7. Final save
with open(out_path, "w", encoding="utf-8") as f:
    json.dump(results, f, ensure_ascii=False, indent=2)