Esta API fue desarrollada en Laravel 11 y utiliza el paquete laravel open ai para integrar los servicios principales de OpenAI, tales como:
- Chatbot de Text (GPT-4o)
- Chat con Images (GPT-4o)
- Transcripción (Text-to-Speech: tts-1 / tts-1-hd)
- Conversión de voz a texto (Speech-to-Text: Whisper)
- Generación de imágenes (Text-to-Image con DALL·E 2 y DALL·E 3)
- Traducción de textos
La documentación se basa en la documentación oficial de OpenAI y en las validaciones definidas en cada Request. Este README ofrece una descripción detallada de cada funcionalidad, los endpoints disponibles, las validaciones aplicadas y las instrucciones para la instalación y uso del proyecto.
-
Clonar el repositorio
git clone https://github.com/StevenU21/OpenAI-Models-API.git
cd OpenAI-Models-API
-
Instalar dependencias
Asegúrate de tener Composer instalado y ejecuta:
composer install
-
Configurar el entorno
Copia el archivo
.env.example
a.env
y configura las variables de entorno (incluyendo las credenciales de OpenAI y la configuración de la base de datos):cp .env.example .env php artisan key:generate
-
Migrar la base de datos (si aplica)
php artisan migrate
-
Levantar el servidor
php artisan serve
-
OpenAI API Key:
Configura la variableOPENAI_API_KEY
en el archivo.env
con tu clave de API de OpenAI. -
Paquete laravel open ai:
El paquete se encarga de gestionar las solicitudes hacia los servicios de OpenAI. Revisa la documentación oficial del paquete para más detalles de configuración avanzada.
La API se organiza en diferentes grupos de rutas. A continuación se detalla cada uno de los endpoints y su funcionalidad.
Permite interactuar con el servicio de chatbot, obtener modelos disponibles, prompts y generar conversaciones.
-
GET
/api/chat/models
Descripción: Retorna la lista de modelos disponibles para el chatbot.
Nombre de la ruta:chat.models
-
GET
/api/chat/prompts
Descripción: Obtiene una colección de prompts predefinidos.
Nombre de la ruta:chat.prompts
-
POST
/api/chat
Descripción: Envía un mensaje para iniciar una conversación.
Nombre de la ruta:chat.conversation
Validaciones:text
: requerido, cadena de texto (mín. 3, máx. 1000 caracteres)model
: requerido, cadenatemperature
: requerido, numérico (entre 0 y 1.4)prompt
: requerido, cadena
-
POST
/api/chat/streamed
Descripción: Envía una solicitud de conversación con respuesta en tiempo real vía SSE.
Nombre de la ruta:chat.streamed.conversation
-
POST
/api/chat/image
Descripción: Genera imágenes basadas en una conversación o prompt.
Nombre de la ruta:chat.image.conversation
Permite traducir textos entre diferentes idiomas.
-
GET
/api/translation/languages
Descripción: Obtiene la lista de idiomas disponibles para traducción.
Nombre de la ruta:translation.languages
-
POST
/api/translation
Descripción: Traduce un texto del idioma de origen al de destino.
Nombre de la ruta:translation.translate
Validaciones:text
: requerido, cadena (máx. 1000 caracteres)source_language
: requerido, cadena (máximo 2 caracteres, debe ser diferente al target)target_language
: requerido, cadena (máximo 2 caracteres, debe ser diferente al source)
Convierte texto a audio utilizando modelos de TTS.
-
GET
/api/text-to-speech/models
Descripción: Lista de modelos disponibles para Text-to-Speech.
Nombre de la ruta:text-to-speech.models
-
GET
/api/text-to-speech/voices
Descripción: Lista de voces disponibles.
Nombre de la ruta:text-to-speech.voices
-
GET
/api/text-to-speech/voices/audio
Descripción: Retorna ejemplos de audio de las voces disponibles.
Nombre de la ruta:text-to-speech.voices.audio
-
GET
/api/text-to-speech/languages
Descripción: Obtiene los idiomas soportados para la conversión.
Nombre de la ruta:text-to-speech.languages
-
GET
/api/text-to-speech/response-formats
Descripción: Lista de formatos de respuesta disponibles (mp3, opus, aac, flac, wav, pcm).
Nombre de la ruta:text-to-speech.response-formats
-
POST
/api/text-to-speech
Descripción: Convierte un texto en audio.
Nombre de la ruta:text-to-speech.text-to-speech
Validaciones:model
: requerido, cadena, valores permitidos:tts-1, tts-1-hd
input
: requerido, cadena (mín. 3, máx. 4096 caracteres)voice
: requerido, cadena (valores permitidos:alloy, ash, coral, echo, fable, onyx, nova, sage, shimmer
)response_format
: cadena, valores permitidos:mp3, opus, aac, flac, wav, pcm
speed
: numérico (entre 0.25 y 4.0)language
: cadena (debe pertenecer a la lista de idiomas soportados)
-
GET
/api/text-to-speech/generated-audio
Descripción: Recupera los audios generados previamente.
Nombre de la ruta:text-to-speech.generate-audio
-
POST
/api/text-to-speech/streamed
Descripción: Convierte texto a audio con respuesta en streaming.
Nombre de la ruta:text-to-speech.streamed
Convierte archivos de audio a texto.
-
GET
/api/speech-to-text/languages
Descripción: Lista de idiomas disponibles para Speech-to-Text.
Nombre de la ruta:speech-to-text.languages
-
GET
/api/speech-to-text/response-formats
Descripción: Formatos de respuesta permitidos (json, text, srt, verbose_json, vtt).
Nombre de la ruta:speech-to-text.response-formats
-
GET
/api/speech-to-text/timestamp-granularities
Descripción: Opciones de granularidad para los timestamps (word, segment).
Nombre de la ruta:speech-to-text.timestamp-granularities
-
GET
/api/speech-to-text/actions
Descripción: Acciones soportadas para Speech-to-Text.
Nombre de la ruta:speech-to-text.actions
-
POST
/api/speech-to-text
Descripción: Convierte un archivo de audio a texto.
Validaciones:file
: requerido, debe ser un archivo con extensiónmp3, mp4, mpeg, mpga, m4a, wav, webm
y máximo de 25MB.language
: cadena, debe pertenecer a un listado de idiomas (por ejemplo: en, es, fr, etc.).response_format
: cadena, valores permitidos:json, text, srt, verbose_json, vtt
temperature
: numérico (entre 0 y 1)timestamp_granularities
: requerido siresponse_format
esverbose_json
, valores:word, segment
Genera imágenes a partir de descripciones en texto utilizando los modelos de DALL·E.
-
GET
/api/text-to-image/models
Descripción: Lista de modelos disponibles:dall-e-2
ydall-e-3
.
Nombre de la ruta:text-to-image.models
-
GET
/api/text-to-image/quality
Descripción: Opciones de calidad de imagen (por ejemplo,standard
ohd
según el modelo).
Nombre de la ruta:text-to-image.quality
-
GET
/api/text-to-image/sizes
Descripción: Tamaños permitidos para las imágenes.
Nombre de la ruta:text-to-image.sizes
-
GET
/api/text-to-image/prompt
Descripción: Tipos de prompt soportados para la generación de imágenes.
Nombre de la ruta:text-to-image.prompt
-
GET
/api/text-to-image/response-formats
Descripción: Formatos de respuesta (por ejemplo, URL o b64_json).
Nombre de la ruta:text-to-image.response-formats
-
GET
/api/text-to-image/style
Descripción: Estilos disponibles para la generación de imágenes (por ejemplo, realista, anime, cartoon, etc.).
Nombre de la ruta:text-to-image.style
-
POST
/api/text-to-image
Descripción: Genera una imagen a partir de un prompt.
Validaciones:model
: requerido, valores permitidos:dall-e-2, dall-e-3
prompt
: requerido, cadena (mín. 8 caracteres). Además, se valida la longitud máxima:- Máximo 1000 caracteres para
dall-e-2
- Máximo 4000 caracteres para
dall-e-3
- Máximo 1000 caracteres para
type
: requerido, cadena, opciones:realistic, anime, cartoon, futuristic, abstract, impressionist, pixel art, watercolor, noir, steampunk, fantasy, vintage, scifi, minimalist, hyperrealistic, dramatic
image_number
: entero, de 1 a 10. Se aplica:- Máximo 1 para
dall-e-3
- Máximo 10 para
dall-e-2
- Máximo 1 para
style
: paradall-e-3
es requerido y debe servivid
onatural
size
: requerido, con valores permitidos que dependen del modelo:- Para
dall-e-2
:256x256, 512x512, 1024x1024
- Para
dall-e-3
:1024x1024, 1792x1024, 1024x1792
- Para
response_format
: cadena, valores permitidos:url, b64_json
quality
: opcional, para:dall-e-2
:standard
dall-e-3
:standard, hd
La API utiliza las validaciones propias de Laravel para asegurar que las solicitudes cumplen con los requisitos. A continuación se resumen algunas reglas clave:
-
text:
- Obligatorio
- Tipo: cadena
- Longitud mínima de 3 y máxima de 1000 caracteres
-
model:
- Obligatorio
- Tipo: cadena
-
temperature:
- Obligatorio
- Tipo: numérico, con valor entre 0 y 1.4
-
prompt:
- Obligatorio
- Tipo: cadena
-
file:
- Obligatorio
- Debe ser un archivo de audio con extensiones permitidas:
mp3, mp4, mpeg, mpga, m4a, wav, webm
- Tamaño máximo: 25MB
-
language:
- Opcional, pero debe pertenecer a la lista de códigos (ej.: en, es, fr, etc.)
-
response_format:
- Opcional, valores permitidos:
json, text, srt, verbose_json, vtt
- Opcional, valores permitidos:
-
temperature:
- Opcional, numérico (entre 0 y 1)
-
timestamp_granularities:
- Obligatorio si el
response_format
esverbose_json
, valores:word, segment
- Obligatorio si el
-
model:
- Obligatorio
- Valores permitidos:
dall-e-2, dall-e-3
-
prompt:
- Obligatorio
- Tipo: cadena, mínimo 8 caracteres
- Longitud máxima variable según modelo:
dall-e-2
: máximo 1000 caracteresdall-e-3
: máximo 4000 caracteres
-
type:
- Obligatorio
- Tipo: cadena con opciones predefinidas (ej.: realistic, anime, cartoon, etc.)
-
image_number:
- Entero, entre 1 y 10
- Se limita a 1 para
dall-e-3
y hasta 10 paradall-e-2
-
style:
- Para
dall-e-3
es obligatorio - Valores permitidos:
vivid, natural
- Para
-
size:
- Obligatorio, con opciones que varían según el modelo
-
response_format:
- Opcional, valores:
url, b64_json
- Opcional, valores:
-
quality:
- Opcional, valores dependen del modelo:
- Para
dall-e-2
:standard
- Para
dall-e-3
:standard, hd
- Para
- Opcional, valores dependen del modelo:
-
model:
- Obligatorio
- Valores permitidos:
tts-1, tts-1-hd
-
input:
- Obligatorio
- Tipo: cadena, entre 3 y 4096 caracteres
-
voice:
- Obligatorio
- Valores permitidos:
alloy, ash, coral, echo, fable, onyx, nova, sage, shimmer
-
response_format:
- Opcional, valores:
mp3, opus, aac, flac, wav, pcm
- Opcional, valores:
-
speed:
- Opcional, numérico (entre 0.25 y 4.0)
-
language:
- Opcional, debe pertenecer a la lista de idiomas soportados
-
text:
- Obligatorio
- Tipo: cadena, máximo 1000 caracteres
-
source_language:
- Obligatorio
- Tipo: cadena, máximo 2 caracteres y debe ser diferente de
target_language
-
target_language:
- Obligatorio
- Tipo: cadena, máximo 2 caracteres y diferente de
source_language
curl -X POST http://localhost:8000/api/chat \
-H "Content-Type: application/json" \
-d '{
"text": "Hola, ¿cómo estás?",
"model": "gpt-4",
"temperature": 0.7,
"prompt": "Asistente de ayuda"
}'
curl -X POST http://localhost:8000/api/translation \
-H "Content-Type: application/json" \
-d '{
"text": "Hello, how are you?",
"source_language": "en",
"target_language": "es"
}'
curl -X POST http://localhost:8000/api/text-to-speech \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Bienvenido a nuestro servicio",
"voice": "nova",
"response_format": "mp3",
"speed": 1.0,
"language": "es"
}'
curl -X POST http://localhost:8000/api/speech-to-text \
-F "file=@/ruta/a/tu/audio.wav" \
-F "language=es" \
-F "response_format=json" \
-F "temperature=0.5" \
-F "timestamp_granularities=word"
curl -X POST http://localhost:8000/api/text-to-image \
-H "Content-Type: application/json" \
-d '{
"model": "dall-e-3",
"prompt": "Una ilustración futurista de una ciudad",
"type": "futuristic",
"image_number": 1,
"style": "vivid",
"size": "1024x1024",
"response_format": "url"
}'
- Documentación oficial de OpenAI
- Generación de Textos
- Generación de Imágenes
- Generación de Audio a partir de Texto
- Generación de Transcriptiones
- Endpoints de la ApI de Open AI con Parámetros
- Laravel Open AI (paquete)