AUTH FAIL при вызове функции Firebase с оценкой Gemini AI/Embedding/SentimentJavascript

Форум по Javascript
Ответить
Anonymous
 AUTH FAIL при вызове функции Firebase с оценкой Gemini AI/Embedding/Sentiment

Сообщение Anonymous »

Это ошибка, которую я получаю в консоли, в консоли Flutter при тестировании я получаю НЕАУТЕНТИФИКАЦИОННЫЙ. Однако я могу войти в приложение и совершать другие вызовы, например получать данные из Firestore и т. д.
В локальной среде все в порядке и работает отлично.

Код: Выделить всё

import {
GoogleGenAI
} from "@google/genai";
const apiKey = process.env.GEMINI_API_KEY;
const ai = apiKey ? new GoogleGenAI({
apiKey
}) : null;
Вот моя полная функция.

Код: Выделить всё

export const createAQuickPin = onCall(async (data, context) => {

const { pinContent } = data.data;

if (!pinContent) {
throw new HttpsError('invalid-argument', 'Missing or invalid parameters.');
}
if (!data.auth) {
throw new HttpsError('unauthenticated', 'The function must be called while authenticated.');
}

const uid = data.auth.uid;

// Check for AI client configuration
if (!ai) {
throw new HttpsError('internal',
'AI service is not configured. Check the server logs for the missing API key error.');
}

var systemInstruction = AI_CREATE_PIN;

try {

systemInstruction = systemInstruction.replace(/\$pinContent/g, pinContent);

const geminiResponsePromise = ai.models.generateContent({
model: modelName,
contents: pinContent,
config: {
systemInstruction: systemInstruction
}
});

const sentimentPromise = textClient.analyzeSentiment({
document: {
content: pinContent,
type: "PLAIN_TEXT"
}
});

const embedText = `${pinContent}`;
const embeddingModel = "gemini-embedding-001";

const embeddingPromise = ai.models.embedContent({
model: embeddingModel,
contents: embedText,
});

const [embeddedResponse, sentimentResponse, geminiResponse] = await Promise.all([
embeddingPromise,
sentimentPromise,
geminiResponsePromise
]);

const responseText = geminiResponse.text.trim();
const parsed = JSON.parse(responseText);

const embedding = embeddedResponse.embeddings[0].values;
const sentimentScore = sentimentResponse[0].sentences[0].sentiment.score;

// --- 5. Database Write (only if valid) ---
if (parsed.isValid) {
const pinRef = db
.collection("users")
.doc(uid)
.collection("pins")
.doc();

await pinRef.set({
pinCategory: parsed.pinCategory,
pinSubject: parsed.pinSubject,
pinContent: pinContent,
pinConfidence: parsed.confidence,
seekAdvice: parsed.seekAdvice,
embedding: embedding,
sentimentScore: sentimentScore,
pinAddedDate: FieldValue.serverTimestamp(),
});
}

return {
promptFromUser: pinContent,
pinCategory: parsed.pinCategory,
pinSubject: parsed.pinSubject,
confidence: parsed.confidence,
seekAdvice: parsed.seekAdvice,
isValid: parsed.isValid,
modelUsed: modelName
};

} catch (error) {
console.error('Error in createAQuickPin:', error);
throw new HttpsError('unavailable', 'The AI service is temporarily unavailable or returned an error.');
}
});
textPayload: «Запрос не авторизован для вызова этой службы. Дополнительную информацию по устранению неполадок можно найти по адресу https://cloud.google.com/run/docs/troubleshooting#401».

вот мой IAM
Изображение

я спросил у Gemini и подписался на него, но все равно ничего... любая помощь будет УДИВИТЕЛЬНОЙ!

Подробнее здесь: https://stackoverflow.com/questions/798 ... iment-scor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»