mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 07:04:45 +00:00
fix(ai): don't cache false for Vertex ADC credentials during async import race (#1550)
`hasVertexAdcCredentials()` uses dynamic imports to load `node:fs`, `node:os`, and `node:path` to avoid breaking browser/Vite builds. These imports are fired eagerly but resolve asynchronously. If the function is called during gateway startup before those promises resolve, `_existsSync`, `_homedir`, and `_join` are still null — causing the function to cache `false` permanently and never re-evaluate. This means users with valid `GOOGLE_APPLICATION_CREDENTIALS`, `GOOGLE_CLOUD_PROJECT`, and `GOOGLE_CLOUD_LOCATION` configured are silently treated as unauthenticated for Vertex AI. Calls fall back to the AI Studio endpoint (generativelanguage.googleapis.com) which has much stricter rate limits, causing unexpected 429 errors even though Vertex credentials are correctly configured. Fix: in Node.js/Bun environments, return false without caching when the async modules aren't loaded yet, so the next call retries. Only cache false permanently in browser environments where `fs` is genuinely unavailable. Co-authored-by: Jeremiah Gaylord <jeremiahgaylord-web@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7390f830de
commit
cf656c169c
1 changed files with 8 additions and 2 deletions
|
|
@ -22,9 +22,15 @@ let cachedVertexAdcCredentialsExists: boolean | null = null;
|
|||
|
||||
function hasVertexAdcCredentials(): boolean {
|
||||
if (cachedVertexAdcCredentialsExists === null) {
|
||||
// In browser or if node modules not loaded yet, return false
|
||||
// If node modules haven't loaded yet (async import race at startup),
|
||||
// return false WITHOUT caching so the next call retries once they're ready.
|
||||
// Only cache false permanently in a browser environment where fs is never available.
|
||||
if (!_existsSync || !_homedir || !_join) {
|
||||
cachedVertexAdcCredentialsExists = false;
|
||||
const isNode = typeof process !== "undefined" && (process.versions?.node || process.versions?.bun);
|
||||
if (!isNode) {
|
||||
// Definitively in a browser — safe to cache false permanently
|
||||
cachedVertexAdcCredentialsExists = false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue