{"id":18947657,"url":"https://github.com/pedcapa/mosaic-api","last_synced_at":"2025-07-20T22:06:14.530Z","repository":{"id":251093277,"uuid":"817007101","full_name":"pedcapa/mosaic-api","owner":"pedcapa","description":"Este proyecto es una API creada con FastAPI que utiliza la API de OpenAI para generar respuestas de texto personalizadas, imágenes y preguntas de opción múltiple basadas en el perfil de usuario. También incluye la funcionalidad para convertir audio a texto y analizar contenido de PDF.","archived":false,"fork":false,"pushed_at":"2024-08-19T20:08:40.000Z","size":727,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-01T22:13:43.767Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pedcapa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-18T20:35:54.000Z","updated_at":"2024-10-24T01:07:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"4b20b2cc-0a6d-4c81-aa4a-d5873046adf1","html_url":"https://github.com/pedcapa/mosaic-api","commit_stats":null,"previous_names":["pedcapa/mosaic-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pedcapa/mosaic-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedcapa%2Fmosaic-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedcapa%2Fmosaic-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedcapa%2Fmosaic-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedcapa%2Fmosaic-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pedcapa","download_url":"https://codeload.github.com/pedcapa/mosaic-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedcapa%2Fmosaic-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266205138,"owners_count":23892410,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T13:10:49.736Z","updated_at":"2025-07-20T22:06:14.508Z","avatar_url":"https://github.com/pedcapa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mosaic API\n\nEste proyecto es una API creada con FastAPI que utiliza la API de OpenAI para generar respuestas de texto personalizadas, imágenes y preguntas de opción múltiple basadas en el perfil de usuario. También incluye la funcionalidad para convertir audio a texto y analizar contenido de PDF.\n\n## Requisitos\n\n- Servidor con Ubuntu (o similar) accesible vía SSH\n- Python 3.7 o superior\n- `pip` para la instalación de dependencias\n- Cuenta en OpenAI con una clave API válida\n- Acceso al DNS para configurar subdominios\n- Permisos de administrador en el servidor\n\n## Pasos de Instalación y Configuración\n\n### 1. Conectar al Servidor SSH\n\nConéctate a tu servidor utilizando SSH:\n\n```bash\nssh tu_usuario@tu_servidor_ip\n```\n\n### 2. Actualizar e Instalar Dependencias Básicas\n\nActualiza tu sistema e instala Python y pip:\n\n```bash\nsudo apt update\nsudo apt upgrade -y\nsudo apt install python3 python3-pip python3-venv nginx -y\n```\n\n### 3. Configurar el Entorno Virtual\n\nCrea un entorno virtual para el proyecto y actívalo:\n\n```bash\npython3 -m venv venv\nsource venv/bin/activate\n```\n\n### 4. Clonar el Repositorio y Navegar a la Carpeta del Proyecto\n\nClona tu repositorio en el servidor:\n\n```bash\ngit clone https://github.com/pedcapa/live-learning-api.git\ncd live-learning-api\n```\n\n### 5. Instalar las Dependencias\n\nCon el entorno virtual activado, instala las dependencias del proyecto:\n\n```bash\npip install -r requirements.txt\n```\n\n### 6. Configurar la Clave API de OpenAI\n\nCrea un archivo `.env` en el directorio raíz del proyecto y añade tu clave API de OpenAI:\n\n```plaintext\nOPENAI_API_KEY=tu_clave_api_de_openai\n```\n\n### 7. Configurar Nginx para el Subdominio\n\nEdita o crea un archivo de configuración para Nginx:\n\n```bash\nsudo nano /etc/nginx/sites-available/live.galliard.mx\n```\n\nAñade la siguiente configuración:\n\n```nginx\nserver {\n    listen 80;\n    server_name api.example.com;\n\n    location / {\n        proxy_pass http://127.0.0.1:8000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\nGuarda el archivo y crea un enlace simbólico en el directorio `sites-enabled`:\n\n```bash\nsudo ln -s /etc/nginx/sites-available/live.galliard.mx /etc/nginx/sites-enabled/\n```\n\nPrueba la configuración de Nginx para asegurarte de que no haya errores:\n\n```bash\nsudo nginx -t\n```\n\nSi todo está bien, reinicia Nginx:\n\n```bash\nsudo systemctl restart nginx\n```\n\n### 8. Configurar el Subdominio en GoDaddy\n\n1. **Accede a tu cuenta de GoDaddy** y ve a la sección de administración de dominios.\n2. **Selecciona tu dominio** `example.com` y ve a la configuración de DNS.\n3. **Añade un registro A**:\n   - Nombre: `api`\n   - Valor: La IP de tu servidor.\n   - TTL: Selecciona el valor predeterminado o 1 hora.\n4. Guarda los cambios.\n\n### 9. Iniciar la Aplicación FastAPI\n\nInicia la aplicación usando `uvicorn`:\n\n```bash\nuvicorn app.main:app --host 0.0.0.0 --port 8000 --reload\n```\n\nPara ejecutar el servidor en segundo plano y que siga funcionando después de cerrar la sesión SSH, puedes usar `screen` o `nohup`.\n\n#### Usar `screen`:\n\n```bash\nsudo apt install screen\nscreen -S my_fastapi_app\nuvicorn app.main:app --host 0.0.0.0 --port 8000 --reload\n```\n\nLuego, presiona `Ctrl + A` seguido de `D` para desconectarte de la sesión `screen`.\n\n#### Usar `nohup`:\n\n```bash\nnohup uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload \u0026\n```\n\n### 10. Configurar como Servicio del Sistema (Opcional)\n\nSi prefieres que la aplicación se inicie automáticamente al arrancar el sistema, puedes configurarla como un servicio de `systemd`.\n\nCrea un archivo de servicio para `systemd`:\n\n```bash\nsudo nano /etc/systemd/system/fastapi.service\n```\n\nAñade la siguiente configuración, ajustando los caminos a tu entorno y aplicación:\n\n```ini\n[Unit]\nDescription=FastAPI service\nAfter=network.target\n\n[Service]\nUser=your_user\nGroup=www-data\nWorkingDirectory=/path/to/your/tu-repositorio\nExecStart=/path/to/your/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000\nRestart=always\n\n[Install]\nWantedBy=multi-user.target\n```\n\nReemplaza `/path/to/your/` con la ruta adecuada en tu sistema.\n\nHabilita y arranca el servicio:\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl start fastapi.service\nsudo systemctl enable fastapi.service\n```\n\n## Uso de la API\n\nA continuación se describen los endpoints disponibles en la API.\n\n### 1. Obtener Respuesta Personalizada\n\n**Endpoint:** `POST /api/v1/gpt_response`\n\n**Descripción:** Obtiene una respuesta personalizada que puede incluir texto y prompts para imágenes, basándose en el perfil del usuario.\n\n**Ejemplo de Input JSON:**\n\n```json\n{\n  \"prompt\": \"Explique el sistema solar.\",\n  \"user_profile\": {\n    \"interests\": [\"astronomía\", \"planetas\"],\n    \"learning_style\": [\"visual\"],\n    \"disability\": [\"ADHD\"]\n  }\n}\n```\n\n**Ejemplo de Response JSON:**\n\n```json\n{\n  \"content\": [\n    {\n      \"type\": \"paragraph\",\n      \"text\": \"El sistema solar es un grupo de planetas que giran alrededor del sol...\"\n    },\n    {\n      \"type\": \"image\",\n      \"description\": \"Una ilustración del sistema solar con todos los planetas alineados.\"\n    }\n  ]\n}\n```\n\n### 2. Generar Imagen\n\n**Endpoint:** `POST /api/v1/generate_image`\n\n**Descripción:** Genera una imagen basada en un prompt utilizando la API de OpenAI.\n\n**Ejemplo de Input JSON:**\n\n```json\n{\n  \"prompt\": \"Una ilustración de un bosque encantado.\",\n  \"user_profile\": {\n    \"interests\": [\"naturaleza\", \"arte\"],\n    \"learning_style\": [\"visual\"],\n    \"disability\": [\"dislexia\"]\n  }\n}\n```\n\n**Ejemplo de Response JSON:**\n\n```json\n{\n  \"url\": \"https://openai.com/image_url_example\"\n}\n```\n\n### 3. Generar Preguntas de Opción Múltiple\n\n**Endpoint:** `POST /api/v1/generate_quizz`\n\n**Descripción:** Genera un conjunto de 5 preguntas de opción múltiple basadas en el contenido proporcionado.\n\n**Ejemplo de Input JSON:**\n\n```json\n{\n  \"content\": [{\n    \"type\": \"paragraph\",\n    \"text\": \"El agua es esencial para la vida. Se encuentra en tres estados: sólido, líquido y gaseoso...\"\n  }]\n}\n```\n\n**Ejemplo de Response JSON:**\n\n```json\n[\n  {\n    \"question_number\": 1,\n    \"question_text\": \"¿Cuáles son los tres estados del agua?\",\n    \"options\": {\n      \"Sólido, líquido y gaseoso\": true,\n      \"Sólo líquido y gaseoso\": false,\n      \"Sólido y líquido\": false\n    }\n  }\n]\n```\n\n### 4. Convertir Audio a Texto\n\n**Endpoint:** `POST /api/v1/speech_to_text`\n\n**Descripción:** Convierte un archivo de audio en texto utilizando el modelo Whisper de OpenAI.\n\n**Ejemplo de Input JSON:**\n\n```json\n{\n  \"file\": \"ruta_al_archivo_de_audio.mp3\"\n}\n```\n\n**Ejemplo de Response JSON:**\n\n```json\n{\n  \"text\": \"Texto transcrito del audio.\"\n}\n```\n\n### 5. Generar Respuesta Basada en PDF\n\n**Endpoint:** `POST /api/v1/generate_via_pdf`\n\n**Descripción:** Genera una respuesta basada en el contenido de un archivo PDF proporcionado.\n\n**Ejemplo de Input JSON:**\n\n```json\n{\n  \"prompt\": \"ruta_al_archivo.pdf\",\n  \"user_profile\": {\n    \"interests\": [\"historia\", \"arte\"],\n    \"learning_style\": [\"textual\"],\n    \"disability\": [\"ADHD\"]\n  }\n}\n```\n\n**Ejemplo de Response JSON:**\n\n```json\n{\n  \"content\": [\n    {\n      \"type\": \"paragraph\",\n      \"text\": \"El archivo PDF contiene información sobre...\"\n    },\n    {\n      \"type\": \"image\",\n      \"description\": \"Una ilustración acerca de...\"\n    }\n  ]\n}\n```\n\n### 6. Subir Archivo PDF o de Audio\n\n**Endpoint:** `POST /api/v1/upload_file/`\n\n**Descripción:** Permite subir archivos PDF o de audio al servidor.\n\n**Ejemplo de Input (multipart/form-data):**\n\n- `file`: El archivo que se va a subir.\n\n**Ejemplo de Response JSON:**\n\n```json\n{\n  \"filename\": \"nombre_del_archivo.pdf\",\n  \"location\": \"./app/uploads/nombre_del_archivo.pdf\"\n}\n```\n\n## Notas Adicionales\n\n- Asegúrate de configurar correctamente las variables de entorno para la API de OpenAI.\n- Para producción, considera usar HTTPS y configurar el servidor detrás de un proxy reverso como Nginx.\n- El uso de `screen` o `nohup` es opcional pero recomendado para mantener la API en ejecución en segundo plano.\n\n\n## Licencia\n\nEste proyecto está licenciado bajo la MIT License. Ver el archivo [LICENSE](LICENSE) para más detalles.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedcapa%2Fmosaic-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpedcapa%2Fmosaic-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedcapa%2Fmosaic-api/lists"}