from transformers import AutoModelForCausalLM, AutoTokenizerimport torch model = AutoModelForCausalLM.from_pretrained("Roskosmos19/Rhea-4B-Coding", dtype=torch.bfloat16, trust_remote_code=True, device_map="auto") tokenizer = AutoTokenizer.from_pretrained("Roskosmos19/Rhea-4B-Coding", trust_remote_code=True) def generate_multi_pass(prompt, max_tokens_per_pass=4096): """ Generate code with 3-pass reasoning: Pass 1: First implementation Pass 2: Self-review Pass 3: Final optimized version """ # Pass 1: First implementation messages = [{"role": "user", "content": prompt}] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to('cuda') with torch.no_grad(): output1 = model.generate( **inputs, max_new_tokens=max_tokens_per_pass, temperature=0.4, pad_token_id=tokenizer.pad_token_id, eos_token_id=tokenizer.eos_token_id, ) pass1 = tokenizer.decode(output1[0], skip_special_tokens=False) # Pass 2: Self-review review_prompt = pass1 + "\n<<think>\n### PASS 2 - Self-Review:\n" inputs2 = tokenizer(review_prompt, return_tensors="pt").to('cuda') with torch.no_grad(): output2 = model.generate( **inputs2, max_new_tokens=2048, temperature=0.3, pad_token_id=tokenizer.pad_token_id, eos_token_id=tokenizer.eos_token_id, ) review = tokenizer.decode(output2[0], skip_special_tokens=False) # Pass 3: Final version final_prompt = review + "\n<<final>\n### PASS 3 - Final Version:\n" inputs3 = tokenizer(final_prompt, return_tensors="pt").to('cuda') with torch.no_grad(): output3 = model.generate( **inputs3, max_new_tokens=max_tokens_per_pass, temperature=0.2, pad_token_id=tokenizer.pad_token_id, eos_token_id=tokenizer.eos_token_id, ) final = tokenizer.decode(output3[0], skip_special_tokens=False) return { "pass1": pass1, "review": review, "pass3": final } # Example usageresult = generate_multi_pass("Write a Python function for binary search")print("=== PASS 1 ===")print(result["pass1"])print("\n=== REVIEW ===")print(result["review"])print("\n=== FINAL ===")print(result["pass3"])