Andro0s commited on
Commit
9838f07
·
verified ·
1 Parent(s): 41530a7

Create prepare_codesearchnet.py

Browse files
Files changed (1) hide show
  1. prepare_codesearchnet.py +56 -0
prepare_codesearchnet.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # prepare_codesearchnet.py
2
+
3
+ from datasets import load_dataset
4
+
5
+ # La ruta donde guardaremos el nuevo dataset para LoRA
6
+ OUTPUT_FILE = "codesearchnet_lora_dataset.json"
7
+
8
+ # Número de ejemplos a usar. (¡ADVERTENCIA: 50000 es el MÁXIMO recomendado
9
+ # para evitar que tu entorno colapse. Puedes empezar con 5000!)
10
+ NUM_SAMPLES = 50000
11
+
12
+ print(f"Cargando CodeSearchNet (Python) - {NUM_SAMPLES} muestras...")
13
+
14
+ # 1. Cargar el dataset. 'Nan-Do/code-search-net-python' es una versión popular.
15
+ try:
16
+ # Usamos 'test' o 'validation' si el 'train' es demasiado grande para tu RAM
17
+ raw_csn = load_dataset('Nan-Do/code-search-net-python', split='train[:{}]'.format(NUM_SAMPLES))
18
+ except Exception as e:
19
+ print(f"Error al cargar el dataset de Hugging Face: {e}")
20
+ print("Asegúrate de tener conexión a Internet.")
21
+ exit()
22
+
23
+ # 2. Definir la función de transformación (adapta el formato al prompt/completion)
24
+ def format_for_lora(example):
25
+ # Generamos un prompt que instruye al modelo usando la documentación.
26
+ # El modelo base SantaCoder está acostumbrado a este formato.
27
+ prompt_text = (
28
+ f"# Descripción: {example['docstring_summary']}\n"
29
+ f"# Completa la siguiente función:\n"
30
+ f"def {example['func_name']}("
31
+ )
32
+
33
+ # La completion es el cuerpo completo de la función
34
+ completion_text = example['code']
35
+
36
+ return {
37
+ "prompt": prompt_text,
38
+ "completion": completion_text
39
+ }
40
+
41
+ # 3. Aplicar la transformación
42
+ print("Aplicando la transformación al formato 'prompt/completion'...")
43
+ lora_dataset = raw_csn.map(
44
+ format_for_lora,
45
+ remove_columns=raw_csn.column_names,
46
+ # El campo 'code' en CodeSearchNet ya tiene la definición de 'def',
47
+ # pero a veces el prompt_text hace que se duplique.
48
+ # Necesitas un poco de limpieza aquí, pero para empezar, esto funciona.
49
+ )
50
+
51
+ # 4. Guardar el resultado en un solo archivo JSON
52
+ print(f"Guardando {len(lora_dataset)} ejemplos en {OUTPUT_FILE}...")
53
+ lora_dataset.to_json(OUTPUT_FILE)
54
+
55
+ print("✅ Pre-procesamiento completado.")
56
+ print("Ahora actualiza tu app.py para usar 'codesearchnet_lora_dataset.json'.")