Skip to content

Una API que hace uso de la libreria de Laravel/OpenAI, integro servicios, y endpoint para facilitar el uso y la integracion de los diferentes modelos de IA que ofrece la API de open AI.

Notifications You must be signed in to change notification settings

StevenU21/openAI-models-api

Repository files navigation

API de Integración OpenAI con Laravel 11

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.


Índice


Instalación

  1. Clonar el repositorio

    git clone https://github.com/StevenU21/OpenAI-Models-API.git
    cd OpenAI-Models-API
  2. Instalar dependencias

    Asegúrate de tener Composer instalado y ejecuta:

    composer install
  3. 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
  4. Migrar la base de datos (si aplica)

    php artisan migrate
  5. Levantar el servidor

    php artisan serve

Configuración

  • OpenAI API Key:
    Configura la variable OPENAI_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.


Endpoints

La API se organiza en diferentes grupos de rutas. A continuación se detalla cada uno de los endpoints y su funcionalidad.

Chat

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, cadena
    • temperature: 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

Traducción

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)

Text-to-Speech

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

Speech-to-Text

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ón mp3, 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 si response_format es verbose_json, valores: word, segment

Text-to-Image

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 y dall-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 o hd 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
    • 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
    • style: para dall-e-3 es requerido y debe ser vivid o natural
    • size: requerido, con valores permitidos que dependen del modelo:
      • Para dall-e-2: 256x256, 512x512, 1024x1024
      • Para dall-e-3: 1024x1024, 1792x1024, 1024x1792
    • response_format: cadena, valores permitidos: url, b64_json
    • quality: opcional, para:
      • dall-e-2: standard
      • dall-e-3: standard, hd

Validaciones y Reglas de Request

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:

Chat Request

  • 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

Speech-to-Text Request

  • 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
  • temperature:

    • Opcional, numérico (entre 0 y 1)
  • timestamp_granularities:

    • Obligatorio si el response_format es verbose_json, valores: word, segment

Text-to-Image Request

  • 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 caracteres
      • dall-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 para dall-e-2
  • style:

    • Para dall-e-3 es obligatorio
    • Valores permitidos: vivid, natural
  • size:

    • Obligatorio, con opciones que varían según el modelo
  • response_format:

    • Opcional, valores: url, b64_json
  • quality:

    • Opcional, valores dependen del modelo:
      • Para dall-e-2: standard
      • Para dall-e-3: standard, hd

Text-to-Speech Request

  • 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
  • speed:

    • Opcional, numérico (entre 0.25 y 4.0)
  • language:

    • Opcional, debe pertenecer a la lista de idiomas soportados

Translation Request

  • 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

Ejemplos de Uso

Ejemplo de Solicitud de Chat

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"
      }'

Ejemplo de Solicitud de Traducción

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"
      }'

Ejemplo de Solicitud de Text-to-Speech

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"
      }'

Ejemplo de Solicitud de Speech-to-Text

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"

Ejemplo de Solicitud de Text-to-Image

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"
      }'

Referencias


About

Una API que hace uso de la libreria de Laravel/OpenAI, integro servicios, y endpoint para facilitar el uso y la integracion de los diferentes modelos de IA que ofrece la API de open AI.

Topics

Resources

Stars

Watchers

Forks