Fine-tuned LoRA adapter for multilingual code generation with focus on SAP ABAP. Larger model with stronger SQL/Java performance.
1from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
2from peft import PeftModel
3
4# Load base model in NF4
5quant_cfg = BitsAndBytesConfig(
6 load_in_4bit=True,
7 bnb_4bit_quant_type="nf4",
8 bnb_4bit_compute_dtype="auto",
9)
10
11base = AutoModelForCausalLM.from_pretrained(
12 "Qwen/Qwen2.5-Coder-14B-Instruct",
13 quantization_config=quant_cfg,
14 device_map="auto",
15)
16model = PeftModel.from_pretrained(base, "ChayannFamali/qwen14b-abap-sql-lora")
17tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-14B-Instruct")
18
19# Generate
20messages = [
21 {"role": "system", "content": "You are an expert ABAP programmer."},
22 {"role": "user", "content": "Implement ABAP class for customer data handling"},
23]
24chatml = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
25inputs = tokenizer(chatml, return_tensors="pt").to(model.device)
26outputs = model.generate(**inputs, max_new_tokens=1024, do_sample=False)
27print(tokenizer.decode(outputs[0]))
For best results, use with the Hybrid RAG pipeline (see
GitHub repo for full instructions):
1from src.rag.retriever import HybridRetriever
2
3retriever = HybridRetriever(
4 chroma_path="data/rag_index",
5 collection_name="code_corpus",
6 chunks_dir="data/rag_corpus/chunks",
7 model_name="BAAI/bge-m3",
8 device="cuda:0",
9)
10
11# Retrieve 3 ABAP examples
12results = retriever.retrieve("Implement ABAP class for sorting", language="ABAP", k=3)
13
14# Build few-shot system prompt
15examples = "\n".join(f"Example {i+1}:\n```\n{r['code'][:800]}\n```\n"
16 for i, r in enumerate(results))
17system = f"You are an expert ABAP programmer.\nHere are 3 relevant ABAP code examples:\n{examples}"
RAG completely eliminates switching (17.8% → 0.0%) without additional training.