File size: 2,663 Bytes
dfe177d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17fdc74
dfe177d
 
e94ab80
17fdc74
e94ab80
dfe177d
 
 
 
 
 
 
17fdc74
 
 
 
 
 
 
 
dfe177d
 
 
 
 
 
 
 
 
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
# from transformers import pipeline

# #load Codet5 model
# code_pipeline = pipeline("text-generation", model="Salesforce/codet5-base")

# def generate_code(instruction: str) -> str:
#   result = code_pipeline(instruction, max_length=256, clean_up_tokenization_spaces=True)
#   return result[0]["generated_text"]


# from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

# tokenizer = AutoTokenizer.from_pretrained("./models", trust_remote_code=True)
# model = AutoModelForSeq2SeqLM.from_pretrained("./models", trust_remote_code=True)


# def generate_code(instruction: str) -> str:
#     prompt = f"Generate Python code for the following instruction: {instruction}"

#     inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
#     output = model.generate(**inputs, max_length=256)
#     generated_code = tokenizer.decode(output[0], skip_special_tokens=True)

#     return generated_code

# from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

# tokenizer = AutoTokenizer.from_pretrained("./models")
# model = AutoModelForSeq2SeqLM.from_pretrained("./models")

# def generate_code(instruction: str) -> str:
#     prompt = f"Generate Python code: {instruction}"
#     inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
#     output = model.generate(**inputs, max_length=256)
#     return tokenizer.decode(output[0], skip_special_tokens=True)

import os
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

MODEL_DIR = "./data/codet5-model"

os.makedirs(MODEL_DIR, exist_ok=True)
# Global variables but not initialized
tokenizer = None
model = None

def load_model():
    global tokenizer, model
    if tokenizer is None or model is None:
        if not os.path.exists(MODEL_DIR):
            print("Downloading CodeT5 model to persistent /data directory...")
            tokenizer = AutoTokenizer.from_pretrained("Salesforce/codet5p-770m-py", cache_dir=MODEL_DIR)
            model = AutoModelForSeq2SeqLM.from_pretrained("Salesforce/codet5p-770m-py", cache_dir=MODEL_DIR)
        else:
            print("Loading model from /data directory...")    
            tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)
            model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_DIR)
        print("Model loaded.")

def generate_code(instruction: str) -> str:
    load_model()  # Ensure model is loaded before use
    prompt = f"# Instruction: {instruction}\n# Python Code:\n"

    inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
    output = model.generate(**inputs, max_length=256)
    return tokenizer.decode(output[0], skip_special_tokens=True)