Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
Await in a loop. (again)

This problem seems like a rerun of a nightmare for me. The project is to train a chatbot using gpt3 and I'm experimenting with embeddings.

I've got document, and I'm trying to create embeddings for the different sections. getEmbeddings() appears to return a value according to my testing. However, when my loop ends, I don't seem to have an embedding on my section (there's only one... it costs money to make embeddings so I'm only running the loop once until I get it working).

What am I doing wrong?

begin();

async function begin(){
    let sections = [];

    let inputFileName = "sourceDocument.jsonl";
    let filecontents = fs.readFileSync(inputFileName,{encoding:'utf-8'})
    let inputRows = [] = String(filecontents).split(/\r?\n/);

        for(let i = 0; i < inputRows.length; i++) {
            let row = inputRows[i];
            if(row.trim().length == 0) continue;
            let dataObject = JSON.parse(row);
            
            let text = dataObject.completion;
            let section = new Section();
            let titleend =  text.indexOf("'>")
            
            //console.log(dataObject);
    
            section.title = text.substring(1,titleend);
            section.text = String(text).substring( (titleend + 2), (text.length - 10) );
            section.embedding = await getEmbedding(section.text);
            sections.push(section);
            
            break;
        }

    console.log(sections[0]);   
}

async function getEmbedding(textSample){
    const embeddingModel = "text-search-davinci-doc-001";

    if(DEBUGGING){
        console.log(`DEBUG: getEmbedding(${textSample})`);
    }

    const OPENAI_REQEST_HEADERS = {
        "Content-Type":"application/json",
        "Authorization":`Bearer ${OPENAI_API_KEY}`
    }

    let data = {
        "input"         :   textSample,
        "model"         :   embeddingModel
    };

    let res;
    await axios.post(EMBEDDINGS, data, {headers:OPENAI_REQEST_HEADERS})
    .then((response) => {
        if(DEBUGGING) {
            console.log("   Embedding:  " + response.data.data[0].embedding);
        }
        let embedding = response.data.data[0].embedding;
        return embedding;
    })
    .catch((error) => {
        console.log("Error posting to OpenAI:");
        console.log(error.response.data);
    })
}
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Either use async/await or use the native then pattern of Promises, but try to avoid using both - it gets confusing and thats where you've gone wrong. Your return statement returns from the then method, but not from the outer getEmbedding method itself.

There are 2 ways to solve this - one is to return the result of axios.post but the other, somewhat easier to read method uses async/await throughout

async function getEmbedding(textSample){
    const embeddingModel = "text-search-davinci-doc-001";

    if(DEBUGGING){
        console.log(`DEBUG: getEmbedding(${textSample})`);
    }

    const OPENAI_REQEST_HEADERS = {
        "Content-Type":"application/json",
        "Authorization":`Bearer ${OPENAI_API_KEY}`
    }

    let data = {
        "input"         :   textSample,
        "model"         :   embeddingModel
    };

    try{
        const response = await axios.post(EMBEDDINGS, data, {headers:OPENAI_REQEST_HEADERS});
        if(DEBUGGING) {
            console.log("   Embedding:  " + response.data.data[0].embedding);
        }
        return response.data.data[0].embedding;
    }
    catch(error){
       console.log("Error posting to OpenAI:");
       console.log(error.response.data);
    }
}
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda