skip to Main Content

I had this workflow on pipedream that worked perfect but then it didn’t. I followed this tutorial on youtube: Video (The code heavy version)

This is the code that i have now.

import { Configuration, OpenAIApi } from "openai"
import { encode, decode } from "gpt-3-encoder"

export default defineComponent({
  props: {
    openai: {
      type: "app",
      app: "openai",
    }
  },
  async run({steps, $}) {

    // Import the transcript from the previous step
    const transcript = steps.create_transcription.$return_value.transcription

    // Set the max number of input tokens
    const maxTokens = 2000

    // Initialize OpenAI
    const openAIkey = this.openai.$auth.api_key
    const configuration = new Configuration({
      apiKey: openAIkey,
    });
    const openai = new OpenAIApi(configuration);

    // Split the transcript into shorter strings if needed, based on GPT token limit
    function splitTranscript(encodedTranscript, maxTokens) {
      const stringsArray = []
      let currentIndex = 0

      while (currentIndex < encodedTranscript.length) {
        let endIndex = Math.min(currentIndex + maxTokens, encodedTranscript.length)

        // Find the next period
        while (endIndex < encodedTranscript.length && decode([encodedTranscript[endIndex]]) !== ".") {
          endIndex++
        }

        // Include the period in the current string
        if (endIndex < encodedTranscript.length) {
          endIndex++
        }

        // Add the current chunk to the stringsArray
        const chunk = encodedTranscript.slice(currentIndex, endIndex)
        stringsArray.push(decode(chunk))

        currentIndex = endIndex
      }

      return stringsArray
    }

    const encoded = encode(transcript)

    const stringsArray = splitTranscript(encoded, maxTokens)
    const result = await sendToChat(stringsArray)
    return result

    // Function to send transcript string(s) to Chat API
    async function sendToChat (stringsArray) {

      const resultsArray = []

      for (let arr of stringsArray) {

        // Define the prompt
        const prompt = `Analyze the transcript provided below, then provide the following:
Key "title:" - add a title.
Key "summary" - create a summary.
Key "main_points" - add an array of the main points. Limit each item to 100 words, and limit the list to 10 items.
Key "action_items:" - add an array of action items. Limit each item to 100 words, and limit the list to 5 items.
Key "follow_up:" - add an array of follow-up questions. Limit each item to 100 words, and limit the list to 5 items.
Key "stories:" - add an array of an stories, examples, or cited works found in the transcript. Limit each item to 200 words, and limit the list to 5 items.
Key "arguments:" - add an array of potential arguments against the transcript. Limit each item to 100 words, and limit the list to 5 items.
Key "related_topics:" - add an array of topics related to the transcript. Limit each item to 100 words, and limit the list to 5 items.
Key "sentiment" - add a sentiment analysis

Ensure that the final element of any array within the JSON object is not followed by a comma.

Write all responses in Dutch.

Transcript:
        
        ${arr}`

        let retries = 3
        while (retries > 0) {
          try {
            const completion = await openai.createChatCompletion({
              model: "gpt-3.5-turbo",
              messages: [{role: "user", content: prompt}, {role: "system", content: `You are an assistant that only speaks Dutch, formatted in Markdown. Do not write text that is not formatted as markdown. Do not write in any language other than Dutch.
Example formatting:

{
    "title": "Notion Buttons",
    "summary": "A collection of buttons for Notion",
    "action_items": [
        "item 1",
        "item 2",
        "item 3"
    ],
    "follow_up": [
        "item 1",
        "item 2",
        "item 3"
    ],
    "arguments": [
        "item 1",
        "item 2",
        "item 3"
    ],
    "related_topics": [
        "item 1",
        "item 2",
        "item 3"
    ]
    "sentiment": "positive"
}
              `}],
              temperature: 0.2
            });

            resultsArray.push(completion)
            break
          } catch (error) {
            if(error.response && error.response.status === 500) {
              retries--
              if (retries == 0) {
                throw new Error("Failed to get a response from OpenAI Chat API after 3 attempts.")
              }
              console.log("OpenAI Chat API returned a 500 error. Retrying...")
            } else {
              throw error
            }
          }
        }

      }

      return resultsArray
    }

  },
})

That code now gives back an error like this:

Error: SyntaxError: The requested module 'openai' does not provide an export named 'Configuration'
    at handleError (/var/task/common.js:38:40)
    at Runner.runUserCode (file:///var/task/lambda_handler.mjs:866:9)
    at async Runner.run (file:///var/task/lambda_handler.mjs:697:5)
    at async Runtime.handler (file:///var/task/lambda_handler.mjs:914:22)

I tried to change it according to these instructions: github
but I just can’t seem to be able to fix it ( since my coding skills are nonexistent).
I would apreciate some help.

I tried these instructions: github

2

Answers


  1. The GitHub you linked descibes how to migrate to v4 of the openai API you are using. From my understanding the change that concerns you here is, that the way to create the openai instance changed from

    import { Configuration, OpenAIApi } from "openai"
    
    // other code
    
    const configuration = new Configuration({
      apiKey: openAIkey,
    });
    const openai = new OpenAIApi(configuration);
    

    to

    import OpenAI from "openai"
    
    // other code
    
    const openai = new OpenAI({
      apiKey: openAIkey,
    });
    

    Changing these lines should solve your issues, if the rest of the code works.

    Login or Signup to reply.
  2. I got the same problem. It has worked for me for the last months, but not now. This was the script I was using:

    import { Configuration, OpenAIApi } from "openai"
    import { encode, decode } from "gpt-3-encoder"
    
    export default defineComponent({
      props: {
        openai: {
          type: "app",
          app: "openai",
        }
      },
      async run({steps, $}) {
    
        // Import the transcript from the previous step
        const transcript = steps.create_transcription.$return_value.transcription
    
        // Set the max number of input tokens
        const maxTokens = 2000
    
        // Initialize OpenAI
        const openAIkey = this.openai.$auth.api_key
        const configuration = new Configuration({
          apiKey: openAIkey,
        });
        const openai = new OpenAIApi(configuration);
    
        // Split the transcript into shorter strings if needed, based on GPT token limit
        function splitTranscript(encodedTranscript, maxTokens) {
          const stringsArray = []
          let currentIndex = 0
    
          while (currentIndex < encodedTranscript.length) {
            let endIndex = Math.min(currentIndex + maxTokens, encodedTranscript.length)
    
            // Find the next period
            while (endIndex < encodedTranscript.length && decode([encodedTranscript[endIndex]]) !== ".") {
              endIndex++
            }
    
            // Include the period in the current string
            if (endIndex < encodedTranscript.length) {
              endIndex++
            }
    
            // Add the current chunk to the stringsArray
            const chunk = encodedTranscript.slice(currentIndex, endIndex)
            stringsArray.push(decode(chunk))
    
            currentIndex = endIndex
          }
    
          return stringsArray
        }
    
        const encoded = encode(transcript)
    
        const stringsArray = splitTranscript(encoded, maxTokens)
        const result = await sendToChat(stringsArray)
        return result
    
        // Function to send transcript string(s) to Chat API
        async function sendToChat (stringsArray) {
    
          const resultsArray = []
    
          for (let arr of stringsArray) {
    
            // Define the prompt
            const prompt = `Analyze the lecture provided below, then provide the following:
    Key "title:" - add a title.
    Key "summary" - rewrite the lecture in a clear and engaging way, without omitting any important details.
    Key "main_points" - add an array of the main points. add an array of the main points. Limit each item to 100 words, and limit the list to 10 items.
    Key "action_items:" - add an array of action items. Limit each item to 100 words, and limit the list to 5 items.
    Key "follow_up:" - add an array of follow-up questions. Limit each item to 100 words, and limit the list to 5 items.
    Key "stories:" - add an array of an stories, examples, or cited works found in the transcript. Limit each item to 200 words, and limit the list to 5 items.
    Key "arguments:" - add an array of potential arguments against the transcript. Limit each item to 100 words, and limit the list to 5 items.
    Key "related_topics:" - add an array of topics related to the transcript. Limit each item to 100 words, and limit the list to 5 items.
    Key "sentiment" - add a sentiment analysis
    
    Ensure that the final element of any array within the JSON object is not followed by a comma.
    
    Transcript:
            
            ${arr}`
    
            let retries = 3
            while (retries > 0) {
              try {
                const completion = await openai.createChatCompletion({
                  model: "gpt-3.5-turbo",
                  messages: [{role: "user", content: prompt}, {role: "system", content: `You are an assistant that only speaks JSON. Do not write normal text.
    
    Example formatting:
    
    {
        "title": "Notion Buttons",
        "summary": "A collection of buttons for Notion",
        "action_items": [
            "item 1",
            "item 2",
            "item 3"
        ],
        "follow_up": [
            "item 1",
            "item 2",
            "item 3"
        ],
        "arguments": [
            "item 1",
            "item 2",
            "item 3"
        ],
        "related_topics": [
            "item 1",
            "item 2",
            "item 3"
        ]
        "sentiment": "positive"
    }
                  `}],
                  temperature: 0.2
                });
    
                resultsArray.push(completion)
                break
              } catch (error) {
                if(error.response && error.response.status === 500) {
                  retries--
                  if (retries == 0) {
                    throw new Error("Failed to get a response from OpenAI Chat API after 3 attempts.")
                  }
                  console.log("OpenAI Chat API returned a 500 error. Retrying...")
                } else {
                  throw error
                }
              }
            }
    
          }
    
          return resultsArray
        }
    
      },
    })
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search