Spaces:
Sleeping
Sleeping
Upload 5 files
Browse files- config.ini +2 -0
- config.py +8 -0
- doc.md +61 -0
- main.py +45 -0
- requirements.txt +53 -0
config.ini
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
[Openai]
|
2 |
+
openai_key=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
|
config.py
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import configparser
|
2 |
+
|
3 |
+
config = configparser.ConfigParser()
|
4 |
+
|
5 |
+
config.read('config.ini')
|
6 |
+
|
7 |
+
#openai apikey
|
8 |
+
OPENAI_API_KEY = config['Openai']['openai_key']
|
doc.md
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Documentaci贸n del Proyecto: Explicador de C贸digo
|
2 |
+
|
3 |
+
## 1. Descripci贸n del Proyecto
|
4 |
+
Este proyecto consiste en un aplicativo web desarrollado con **Streamlit** y **Python** que permite recibir un fragmento de c贸digo en cualquier lenguaje de programaci贸n y generar una explicaci贸n detallada sobre su funcionamiento. Utiliza **OpenAI GPT-4** para analizar y describir el c贸digo ingresado.
|
5 |
+
|
6 |
+
## 2. Requisitos
|
7 |
+
Para ejecutar este proyecto, es necesario instalar las siguientes dependencias:
|
8 |
+
|
9 |
+
### **2.1 Instalaci贸n de dependencias**
|
10 |
+
Crea un archivo `requirements.txt` con el siguiente contenido:
|
11 |
+
|
12 |
+
```
|
13 |
+
streamlit
|
14 |
+
openai
|
15 |
+
langdetect
|
16 |
+
```
|
17 |
+
|
18 |
+
Luego, instala las dependencias ejecutando:
|
19 |
+
|
20 |
+
```sh
|
21 |
+
pip install -r requirements.txt
|
22 |
+
```
|
23 |
+
|
24 |
+
## 3. Uso del Aplicativo
|
25 |
+
1. Ejecuta el siguiente comando en la terminal para iniciar la aplicaci贸n:
|
26 |
+
|
27 |
+
```sh
|
28 |
+
streamlit run app.py
|
29 |
+
```
|
30 |
+
|
31 |
+
2. Se abrir谩 una interfaz en el navegador donde podr谩s pegar un fragmento de c贸digo en el campo de texto.
|
32 |
+
3. Haz clic en **"Explicar c贸digo"** y el sistema generar谩 una descripci贸n detallada del c贸digo ingresado.
|
33 |
+
|
34 |
+
## 4. Configuraci贸n de la API de OpenAI
|
35 |
+
Para que el modelo de lenguaje funcione correctamente, necesitas una clave de API de OpenAI.
|
36 |
+
|
37 |
+
1. Reg铆strate en [OpenAI](https://openai.com/).
|
38 |
+
2. Obt茅n una clave de API desde la secci贸n de configuraciones de tu cuenta.
|
39 |
+
3. En el archivo `app.py`, reemplaza `tu_clave_aqui` por tu clave de API.
|
40 |
+
|
41 |
+
## 5. Publicaci贸n en Hugging Face Spaces
|
42 |
+
Para subir este proyecto a **Hugging Face Spaces**, sigue estos pasos:
|
43 |
+
|
44 |
+
1. Crea una cuenta en [Hugging Face](https://huggingface.co/).
|
45 |
+
2. Dir铆gete a la secci贸n **Spaces** y crea un nuevo espacio.
|
46 |
+
3. Selecciona **Streamlit** como framework.
|
47 |
+
4. Sube los archivos del proyecto (`app.py`, `requirements.txt`).
|
48 |
+
5. Espera a que se despliegue autom谩ticamente.
|
49 |
+
6. Comparte el enlace generado para que otros puedan acceder al aplicativo.
|
50 |
+
|
51 |
+
## 6. Entrega Final
|
52 |
+
El proyecto deber谩 incluir:
|
53 |
+
- C贸digo fuente en Python (`app.py`).
|
54 |
+
- Archivo `requirements.txt` con las dependencias.
|
55 |
+
- Documentaci贸n detallada (este archivo).
|
56 |
+
- Presentaci贸n de la aplicaci贸n.
|
57 |
+
- Enlace a la aplicaci贸n desplegada en **Hugging Face Spaces**.
|
58 |
+
|
59 |
+
## 7. Contacto y Soporte
|
60 |
+
Para cualquier duda o mejora del proyecto, puedes abrir un **issue** en el repositorio de GitHub o contactar a trav茅s de Hugging Face Spaces.
|
61 |
+
|
main.py
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from openai import OpenAI
|
3 |
+
from config import OPENAI_API_KEY
|
4 |
+
|
5 |
+
client = OpenAI(api_key=OPENAI_API_KEY)
|
6 |
+
import langdetect
|
7 |
+
|
8 |
+
# Configurar la clave de API de OpenAI
|
9 |
+
OPENAI_API_KEY = "tu_clave_aqui"
|
10 |
+
|
11 |
+
def detectar_lenguaje(codigo):
|
12 |
+
"""Detecta el lenguaje de programaci贸n usando langdetect."""
|
13 |
+
try:
|
14 |
+
lenguaje = langdetect.detect(codigo)
|
15 |
+
return lenguaje
|
16 |
+
except:
|
17 |
+
return "Desconocido"
|
18 |
+
|
19 |
+
def explicar_codigo(codigo):
|
20 |
+
"""Genera una explicaci贸n del c贸digo utilizando OpenAI GPT."""
|
21 |
+
prompt = f"Explica detalladamente qu茅 hace el siguiente c贸digo:\n\n{codigo}\n\nExplicaci贸n:"
|
22 |
+
|
23 |
+
respuesta = client.chat.completions.create(model="gpt-4o-mini",
|
24 |
+
messages=[{"role": "system", "content": "Eres un asistente que explica c贸digo de programaci贸n."},
|
25 |
+
{"role": "user", "content": prompt}])
|
26 |
+
return respuesta.choices[0].message.content.strip()
|
27 |
+
|
28 |
+
# Configuraci贸n de la app Streamlit
|
29 |
+
st.title("Explicador de C贸digo")
|
30 |
+
st.write("Introduce un fragmento de c贸digo en cualquier lenguaje de programaci贸n para recibir una explicaci贸n detallada.")
|
31 |
+
|
32 |
+
codigo_usuario = st.text_area("Introduce tu c贸digo aqu铆:")
|
33 |
+
|
34 |
+
if st.button("Explicar c贸digo"):
|
35 |
+
if codigo_usuario.strip():
|
36 |
+
lenguaje = detectar_lenguaje(codigo_usuario)
|
37 |
+
explicacion = explicar_codigo(codigo_usuario)
|
38 |
+
|
39 |
+
st.subheader("Lenguaje detectado:")
|
40 |
+
st.write(lenguaje.capitalize())
|
41 |
+
|
42 |
+
st.subheader("Explicaci贸n del c贸digo:")
|
43 |
+
st.write(explicacion)
|
44 |
+
else:
|
45 |
+
st.warning("Por favor, introduce un c贸digo v谩lido.")
|
requirements.txt
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
altair==5.5.0
|
2 |
+
annotated-types==0.7.0
|
3 |
+
anyio==4.8.0
|
4 |
+
attrs==25.1.0
|
5 |
+
blinker==1.9.0
|
6 |
+
cachetools==5.5.1
|
7 |
+
certifi==2025.1.31
|
8 |
+
charset-normalizer==3.4.1
|
9 |
+
click==8.1.8
|
10 |
+
distro==1.9.0
|
11 |
+
gitdb==4.0.12
|
12 |
+
GitPython==3.1.44
|
13 |
+
h11==0.14.0
|
14 |
+
httpcore==1.0.7
|
15 |
+
httpx==0.28.1
|
16 |
+
idna==3.10
|
17 |
+
Jinja2==3.1.5
|
18 |
+
jiter==0.8.2
|
19 |
+
jsonschema==4.23.0
|
20 |
+
jsonschema-specifications==2024.10.1
|
21 |
+
langdetect==1.0.9
|
22 |
+
markdown-it-py==3.0.0
|
23 |
+
MarkupSafe==3.0.2
|
24 |
+
mdurl==0.1.2
|
25 |
+
narwhals==1.26.0
|
26 |
+
numpy==2.2.3
|
27 |
+
openai==1.63.0
|
28 |
+
packaging==24.2
|
29 |
+
pandas==2.2.3
|
30 |
+
pillow==11.1.0
|
31 |
+
protobuf==5.29.3
|
32 |
+
pyarrow==19.0.0
|
33 |
+
pydantic==2.10.6
|
34 |
+
pydantic_core==2.27.2
|
35 |
+
pydeck==0.9.1
|
36 |
+
Pygments==2.19.1
|
37 |
+
python-dateutil==2.9.0.post0
|
38 |
+
pytz==2025.1
|
39 |
+
referencing==0.36.2
|
40 |
+
requests==2.32.3
|
41 |
+
rich==13.9.4
|
42 |
+
rpds-py==0.22.3
|
43 |
+
six==1.17.0
|
44 |
+
smmap==5.0.2
|
45 |
+
sniffio==1.3.1
|
46 |
+
streamlit==1.42.0
|
47 |
+
tenacity==9.0.0
|
48 |
+
toml==0.10.2
|
49 |
+
tornado==6.4.2
|
50 |
+
tqdm==4.67.1
|
51 |
+
typing_extensions==4.12.2
|
52 |
+
tzdata==2025.1
|
53 |
+
urllib3==2.3.0
|