es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El API de búsqueda de OpenAI GPT3 no funciona de forma local.

Estoy utilizando el cliente de Python para el modelo de búsqueda GPT-3 en mis propios archivos Jsonlines. Cuando ejecuto el código en Google Colab Notebook con fines de prueba, funciona bien y devuelve las respuestas de búsqueda. Pero cuando ejecuto el código en mi máquina local (Mac M1) como una aplicación web (ejecutándose en localhost) utilizando Flask para las funcionalidades del servicio web, obtengo el siguiente error:

Código:

raise self.handle_error_response(
openai.error.InvalidRequestError: El archivo todavía está procesándose. Vuelve a intentarlo más tarde.

Este error ocurre incluso si implemento el mismo ejemplo exacto que se muestra en la documentación de OpenAI. El enlace al ejemplo de búsqueda se encuentra aquí.

Funciona perfectamente en la máquina local y en el cuaderno de Colab si utilizo la API de completación que se utiliza en el playground de GPT-3. (aquí está el enlace al código).

El código que tengo es el siguiente:

import openai

openai.api_key = API_KEY

file = openai.File.create(file=open(jsonFileName), purpose="search")

response = openai.Engine("davinci").search(
          search_model = "davinci", 
          query = query, 
          max_rerank = 5,
          file = file.id
        )
for res in response.data: 
   print(res.text)

¿Alguna idea de por qué ocurre este comportamiento extraño y cómo puedo solucionarlo? Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el archivo aún se está procesando y no se puede utilizar para la operación de búsqueda. Esto puede deberse a un retraso en el procesamiento del archivo, lo cual es más probable que ocurra en una máquina local en comparación con un entorno basado en la nube como Colab.

    Para resolver este problema, puedes esperar a que se complete el procesamiento del archivo antes de realizar la operación de búsqueda, o puedes utilizar un archivo diferente que ya haya sido procesado. Puedes verificar el estado del procesamiento del archivo llamando al método status en el objeto de archivo.

    Otra solución posible es aumentar el valor de tiempo de espera (timeout) para la solicitud de búsqueda, en caso de que el procesamiento del archivo tarde más de lo esperado. Puedes hacer esto pasando el parámetro timeout al método openai.Engine.search. Por ejemplo, timeout=30 establecería el tiempo de espera en 30 segundos.

    Además, también puedes intentar capturar la excepción InvalidRequestError y volver a intentar la operación de búsqueda después de un retraso. Esto puede ser útil en caso de que el procesamiento del archivo se retrase solo brevemente.

    Aquí tienes una versión actualizada del código con manejo de errores y un mecanismo de reintento:

    import openai
    import time
    
    openai.api_key = API_KEY
    
    file = openai.File.create(file=open(jsonFileName), purpose="search")
    
    intentos = 0
    while intentos < 3:
        try:
            response = openai.Engine("davinci").search(
                search_model="davinci",
                query=query,
                max_rerank=5,
                file=file.id,
                timeout=30
            )
            for res in response.data:
                print(res.text)
            break
        except openai.error.InvalidRequestError as e:
            if "File is still processing" in str(e):
                file = openai.File.retrieve(file.id)
                if file.status != "processing":
                    intentos += 1
                time.sleep(5)
            else:
                raise e
    

    Este código vuelve a intentar la operación de búsqueda hasta 3 veces si se produce la excepción InvalidRequestError debido a que el archivo todavía se está procesando. Espera 5 segundos entre reintentos y verifica el estado del archivo antes de reintentar. Si el archivo sigue en proceso, continuará reintentando hasta que se alcance el número máximo de intentos o hasta que el archivo haya terminado de procesarse.

Comments are closed.