Retrieve the ReadStream from Firebase Storage and provide it as input to the Openai API

I am struggling to retrieve an image from firebase storage and transmit it to an openai endpoint

Here is my current code snippet:

const fileStorage = await getStorageAdmin(uid, "/sample.png");
  const file = fileStorage.createReadStream();

  const maskStorage = await getStorageAdmin(uid, "/mask.png");
  const mask = maskStorage.createReadStream();

 const res = await openai.createImageEdit(
      file,
      prompt,
      mask,
      1,
      "512x512",
      "url"
  ).catch((e) => {
      console.log("ERROR: " + e)
  })

However, executing this code yields a Bad Request (status code: 400).

Interestingly, when I attempted to read the files from the hard disk, it worked flawlessly

const file = fs.createReadStream("./images/anna.png");
  const mask = fs.createReadStream("./images/mask.png");

  const res = await openai.createImageEdit(
      file,
      prompt,
      mask,
      1,
      "512x512",
      "url"
  ).catch((e) => {
      console.log("ERROR: " + e)
  })

This indicates that the API request is valid but there seems to be an issue with reading from firebase storage since that is the only disparity, yet I am unable to identify my mistake. I'm perplexed as to why using fs.createReadStream() and firebase-admin's file.createReadStream results in different outcomes. I assumed both methods should provide the image contents, however, one works while the other does not.

The getStorageAdmin function simply retrieves the reference to the desired file for download.

export const getStorageAdmin = async (uid:string, imagepath:string) =>{
    return await getStorage().bucket().file(uid+imagepath)
}

Answer №1

In my opinion, the firebase.createReadStream() method functions asynchronously.

Therefore, the code should look like this:

const fileStorage = await getStorageAdmin(uid, "/sample.png");
const file = await fileStorage.createReadStream();

Would you be able to provide the function definition for getStorageAdmin()?

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Utilizing PHP and JavaScript in a multi-page setting

Apologies for the length of this post in advance. I've been struggling with a coding issue for quite some time now and haven't been able to find a solution. To provide more context and help to those who might assist me, I'm including most of ...

Is the AJAX form submitting back to its own page?

I'm experiencing some issues with AJAX on my website tonight. After submitting a form, the page refreshes with the values in the URL instead of performing the AJAX request. I have a validate plugin with a submit handler in place, but it doesn't s ...

The importance of managing both synchronous and asynchronous processes in Javascript

As I delved into the intricacies of Javascript's asynchronous behavior within its single-threaded environment, I stumbled upon a comment that caught my attention regarding the following code snippet: request(..., function (error, response, body) ...

Changing the model does not automatically update the visibility of ng-show

I have a fragment of my view that simply displays a loading indicator. Html: <span class="app-loading-container"> <span class="app-loading-animation" ng-show="loading"></span> </span> When I initially load the page, the span ...

Leveraging highland.js for sequentially executing asynchronous functions while maintaining references to the initial stream data

I am dealing with a series of events: var eventStream = _([{ id: 1, foo: 'bar' }, { id: 2, foo: 'baz' }]); My task is to load an instance of a model for each event in the stream (my Data Access Layer returns promises) and then tri ...

What are the steps to create a responsive Coin Slider?

Once the slider is generated, it appears that there is no built-in method to resize it, causing issues with responsive design. Is there a way to adjust the size of the Coin Slider plugin based on the media queries in Twitter Bootstrap 3? Take a look at C ...

What could be causing the isAuthenticated function to return false in the local strategy of passport.js even after a user

Here is the code I am using for authentication with passport-local strategy: routes.post("/login", passport.authenticate("local"), (req, res) => { res.json(req.user); }); function ensureAuth(req, res, next) { console.log(req.isAuthenticated()) ...

What is the proper way to declare a JavaScript variable using a hyphen symbol?

When it comes to evaluating a string like employee-count = 3, my main issue arises when dealing with variables that may not have a standard naming convention. While valid variable names pose no challenge, identifiers such as employee-count leave me slightl ...

Can the parcel bundler dist folder be customized for decoration?

After compiling code with parcel using the command parcel src/index.html, all files are generated inside the dist folder. However, I am looking for a more organized way to manage these files once my website is complete. Ideally, I want separate folders suc ...

What is the best way to manage the connections in my D3 tree chart?

I've been working on customizing a tool from an open source library called angular-d3-tree, but I'm struggling with getting the links to connect properly in my D3 tree structure. This is what my current tree layout looks like: https://i.stack.im ...

Using React Hooks to render radio buttons within a map iteration

My code contains a nested map function where I try to retrieve values from radio buttons. However, the issue is that it selects all radio buttons in a row instead of just one. Below is the snippet of my code: <TableHead> <TableRow> ...

Does this Loop run synchronously?

Recently, I crafted this Loop to iterate through data retrieved from my CouchDB database. I am curious whether this Loop operates synchronously or if async/await is necessary for proper execution. database.view('test', 'getAllowedTracker&ap ...

Trying to utilize RegEx for my project, but feeling stuck on how to solve my problem

^\d{1,12}$|(?=^.{1,15}$)^\d+\.\d{1,2}$ This is the current regular expression I am using. I need to adjust the maximum limit to 100,000,000,000 with an option for two decimal places. Additionally, I would like users to be able to inpu ...

Storing map tiles offline in React-Leaflet

One common method I have come across for storing tiles offline with Leaflet involves using localforage. Here's an example: const map = L.map("map-id"); const offlineLayer = L.tileLayer.offline('https://server.arcgisonline.com/ArcGIS/res ...

Drop delete method not functioning as expected

Currently, I am trying to work on a JavaScript delete function that is supposed to delete a row from an SQL table. However, it seems like the function is not working properly. Let me share the code with you: $(document).ready(function(){ $( "#draggabl ...

Alternative way to search for child elements within an element without the use of jQuery

I am in the process of creating a universal set of functions to verify the existence of children with specific attributes within a particular element. Unfortunately, I do not have access to jQuery for this task. Here is an example function call: has_chil ...

Issue encountered when trying to retrieve a database variable from a mapReduce operation in MongoDB

Greetings! I am currently developing an application that utilizes a MongoDB database. Within this database, there exists a user collection where all user data is stored. The structure of a document in this collection is as follows: { "_id" : ObjectId( ...

Transmitting data from Javascript/Ajax to a form

I am using jQuery to calculate a price: $('.label_1').click(function(){ var total = 0; $('.option_1:checked').each(function(){ total += parseInt($(this).val()); }); $('#total').html(' ...

The thumbnail image is failing to load, and when I hover over an image, it moves upwards

I seem to be encountering an issue with a website I uploaded for testing. Everything appears to be working correctly when checked locally in Dreamweaver CS6. However, once the site is uploaded, some issues arise. When hovering over the images, a problem is ...

JavaScript Evaluation Error

try { eval(somejavascript); } catch(e) { console.log(e); } When I encounter runtime errors like: TypeError: Cannot call method 'leftPad' of undefined I wonder if there is any way to debug this error. Specifically, I'm looking for ...