It excels at understanding the semantic relationship between a Python function's implementation details and its natural language documentation.
1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4model_name = "Code/CodeBERTa-Python-DocGen"
5tokenizer = AutoTokenizer.from_pretrained(model_name)
6model = AutoModelForCausalLM.from_pretrained(model_name)
7
8# Input: A Python function body
9code_input = """
10def calculate_l2_norm(vector_a, vector_b):
11 diff = np.array(vector_a) - np.array(vector_b)
12 return np.sqrt(np.sum(diff ** 2))
13"""
14
15# Prepare the prompt for docstring generation:
16prompt = f"<START_CODE> {code_input} <END_CODE> <START_DOCSTRING>"
17
18input_ids = tokenizer.encode(prompt, return_tensors="pt")
19
20# Generate the docstring
21output_ids = model.generate(
22 input_ids,
23 max_length=100,
24 do_sample=True,
25 top_k=50,
26 top_p=0.95,
27 num_return_sequences=1,
28 eos_token_id=tokenizer.encode("<END_DOCSTRING>")[0]
29)
30
31# Decode and clean the output
32generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=False)
33docstring = generated_text.split("<START_DOCSTRING>")[1].split("<END_DOCSTRING>")[0].strip()
34
35print(f"Generated Docstring:\n{docstring}")
36# Expected output: Calculates the L2 (Euclidean) distance between two numerical vectors.
37# :param vector_a: A list or numpy array. :param vector_b: A list or numpy array. :return: The L2 distance (float).