Remix.run Logo
Ozzie_osman 2 days ago

I was recently (vibe)-coding some games with my kid, and we wanted some basic text-to-speech functionality. We tested Google's Gemini models in-browser, and they worked great, so we figured we'd add them to the app. Some fun learnings:

1. You can access those models via three APIs: the Gemini API (which it turns out is only for prototyping and returned errors 30% of the time), the Vertex API (much more stable but lacking in some functionality), and the TTS API (which performed very poorly despite offering the same models). They also have separate keys (at least, Gemini vs Vertex).

2. Each of those APIs supports different parameters (things like language, whether you can pass a style prompt separate from the words you want spoken, etc). None of them offered the full combination we wanted.

3. To learn this, you have to spend a couple hours reading API docs, or alternatively, just have Claude Code read the docs then try all different combinations and figure out what works and what doesn't (with the added risk that it might hallucinate something).

CSMastermind 2 days ago | parent | next [-]

Some other fun things you'll find:

- The models perform differently when called via the API vs in the Gemini UI.

- The Gemini API will randomly fail about 1% of the time, retry logic is basically mandatory.

- API performance is heavily influenced by the whims of the Google we've observed spreads between 30 seconds and 4 minutes for the same query depending on how Google is feeling that day.

hobofan 2 days ago | parent | next [-]

> The Gemini API will randomly fail about 1% of the time, retry logic is basically mandatory.

That is sadly true across the board for AI inference API providers. OpenAI and Anthropic API stability usually suffers around launch events. Azure OpenAI/Foundry serving regularly has 500 errors for certain time periods.

For any production feature with high uptime guarantees I would right now strongly advise for picking a model you can get from multiple providers and having failover between clouds.

downsplat 2 days ago | parent [-]

Yeah at $WORK we use various LLM APIs to analyze text; it's not heavy usage in terms of tokens but maybe 10K calls per day. We've found that response times vary a lot, sometimes going over a minute for simple tasks, and random fails happen. Retry logic is definitely mandatory, and it's good to have multiple providers ready. We're abstracting calls across three different APIs (openai, gemini and mistral, btw we're getting pretty good results with mistral!) so we can switch workloads quickly if needed.

jwillp 2 days ago | parent | next [-]

I've been impressed by ollama running locally for my work, involving grouping short text snippets by semantic meaning, using embeddings, as well as summarization tasks. Depending on your needs, a local GPU can sometimes beat the cloud. (I get no failures and consistent response times with no extra bill.) Obviously YMMV, and not ideal for scaling up unless you love hardware.

duckmysick 2 days ago | parent [-]

Which models have you been using?

phantasmish 2 days ago | parent | prev [-]

It'd be kinda nice if they exposed whatever queuing is going on behind the scenes, so you could at least communicate that to your users.

specproc 2 days ago | parent | prev | next [-]

I have also had some super weird stuff in my output (2.5-flash).

I'm passing docs for bulk inference via Vertex, and a small number of returned results will include gibberish in Japanese.

walthamstow 2 days ago | parent | next [-]

I had this last night from flash lite! My results were interspersed with random snippets of legible, non-gibberish English language. It was like my results had got jumbled with somenone else's.

gfdvgfffv 13 hours ago | parent | prev | next [-]

I’ve gotten Arabic randomly in Claude Code. Programming is becoming more and more like magic.

ashwindharne 2 days ago | parent | prev [-]

I get this a lot too, have made most of the Gemini models essentially unusable for agent-esque tasks. I tested with 2.5 pro and it still sometimes devolved into random gibberish pretty frequently.

halflings 2 days ago | parent | prev | next [-]

"The models perform differently when called via the API vs in the Gemini UI."

This shouldn't be surprised, e.g. the model != the product. The same way GPT4o behaves differently than the ChatGPT product when using GPT4o.

akhilnchauhan 2 days ago | parent | prev | next [-]

> The models perform differently when called via the API vs in the Gemini UI.

This difference between API vs UI responses being different is common across all the big players (Claude, GPT models, etc.)

The consumer chat interfaces are designed for a different experience than a direct API call, even if pinging the same model.

DANmode 2 days ago | parent | prev | next [-]

So, not something for a production app yet.

ianberdin 2 days ago | parent | prev | next [-]

Even funnier, when Pro 3 answers to a previous message in my chat. Just making a duplicate answer with different words. Retry helps, but…

YouAreWRONGtoo 2 days ago | parent [-]

[dead]

te_chris 2 days ago | parent | prev [-]

The way the models behave in Vertex AI Studio vs the API is unforgivable. Totally different.

prodigycorp 2 days ago | parent | prev | next [-]

Also, usage and billing takes a DAY to update. On top of that, there are no billing caps or credit-based billing. They put the entire burden on users not to ensure that they don't have a mega bill.

paganel 2 days ago | parent [-]

> there are no billing caps or credit-based billing.

Was really curious about that when I saw this in the posted article:

> I had some spare cash to burn on this experiment,

Hopefully the article's author is fully aware of the real risk of giving Alphabet his CC details on a project which has no billing caps.

nacozarina 2 days ago | parent [-]

there's prob a couple ppl out there with an Amex Black parked on a cloud acct, lol

te_chris 2 days ago | parent | prev | next [-]

Trying to implement their gRPC api from their specs and protobufs for Live is an exercise in immense frustration and futility. I wanted to call it from Elixir, even with our strong AI I wasted days then gave up.

thecupisblue 2 days ago | parent | prev | next [-]

Oh man let me add onto that!

4. If you read about a new Gemini model, you might want to use it - but are you using @google/genai, @google/generative-ai (wow finally deprecated) or @google-ai/generativelanguage? Silly mistake, but when nano banana dropped it was highly confusing image gen was available only through one of these.

5. Gemini supports video! But that video first has to be uploaded to "Google GenAI Drive" which will then splices it into 1 FPS images and feeds it to the LLM. No option to improve the FPS, so if you want anything properly done, you'll have to splice it yourself and upload it to generativelanguage.googleapis.com which is only accessible using their GenAI SDK. Don't ask which one, I'm still not sure.

6. Nice, it works. Let's try using live video. Open the docs, you get it mentioned a bunch of times but 0 documentation on how to actually do it. Only suggestions for using 3rd party services. When you actually find it in the docs, it says "To see an example of how to use the Live API in a streaming audio and video format, run the "Live API - Get Started" file in the cookbooks repository". Oh well, time to read badly written python.

7. How about we try generating a video - open up AI studio, see only Veo 2 available from the video models. But, open up "Build" section, and I can have Gemini 3 build me a video generation tool that will use Veo 3 via API by clicking on the example. But wait why cant we use Veo 3 in the AI studio with the same API key?

8. Every Veo 3 extended video has absolutely garbled sound and there is nothing you can do about it, or maybe there is, but by this point I'm out of willpower to chase down edgy edge cases in their docs.

9. Let's just mention one semi-related thing - some things in the Cloud come with default policies that are just absurdly limiting, which means you have to create a resource/account, update policies related to whatever you want to do, which then tells you these are _old policies_ and you want to edit new ones, but those are impossible to properly find.

10. Now that we've setup our accounts, our AI tooling, our permissions, we write the code which takes less than all of the previous actions in the list. Now, you want to test it on Android? Well, you can:

- A. Test it with your account by signing in into emulators, be it local or cloud, manually, which means passing 2FA every time if you want to automate this and constantly risking your account security/ban.

- B. Create a google account for testing which you will use, add it to Licensed Testers on the play store, invite it to internal testers, wait for 24-48 hours to be able to use it, then if you try to automate testing, struggle with having to mock a whole Google Account login process which every time uses some non-deterministic logic to show a random pop-up. Then, do the same thing for the purchase process, ending up with a giant script of clicking through the options

11. Congratulations, you made it this far and are able to deploy your app to Beta. Now, find 12 testers to actively use your app for free, continuously for 14 days to prove its not a bad app.

At this point, Google is actively preventing you from shipping at every step, causing more and more issues the deeper down the stack you go.

egorfine 2 days ago | parent [-]

12. Release your first version.

13. Get your whole google account banned.

davidmurdoch 2 days ago | parent [-]

14. Ask why it was banned and they respond with something like "oh you know what you did".

short_sells_poo 2 days ago | parent [-]

Ha, bold of you to assume they'll respond!

2 days ago | parent | prev | next [-]
[deleted]
marqueewinq a day ago | parent | prev [-]

What stack are you using?