mirror of
https://github.com/tiennm99/litellm.git
synced 2026-07-19 22:19:07 +00:00
* test(pass-through): move Gemini pass-through tests to gemini-3.1-flash-lite gemini-2.5-flash-lite is a generation behind and is slated for discontinuation on Vertex AI no earlier than October 16, 2026, so the pass-through suite was exercising an aging model. Every reference now points at gemini-3.1-flash-lite, which is GA and already priced in the cost map so the spend-logging assertions still compute a real cost test_vertex.test.js also gains jest.retryTimes(3) to match the sibling spend tests. The CI failures were intermittent 429 RESOURCE_EXHAUSTED from Vertex quota pressure, and that file was the only one without a retry, so a single rate-limited request was failing the whole job * test(pass-through): point Vertex tests at the global endpoint for gemini-3.1-flash-lite gemini-3.1-flash-lite is not served on the Vertex us-central1 regional endpoint for the CI project, so the Vertex pass-through tests were returning a deterministic 404 "Publisher Model ... was not found or your project does not have access to it" while the Gemini API tests passed. Move the Vertex clients to the global location, which the pass-through router maps to aiplatform.googleapis.com, where the 3.1 family is served
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
const { GoogleGenerativeAI, ModelParams, RequestOptions } = require("@google/generative-ai");
|
|
|
|
const modelParams = {
|
|
model: 'gemini-3.1-flash-lite',
|
|
};
|
|
|
|
const requestOptions = {
|
|
baseUrl: 'http://127.0.0.1:4000/gemini',
|
|
customHeaders: {
|
|
"tags": "gemini-js-sdk,gemini-3.1-flash-lite"
|
|
}
|
|
};
|
|
|
|
const genAI = new GoogleGenerativeAI("sk-1234"); // litellm proxy API key
|
|
const model = genAI.getGenerativeModel(modelParams, requestOptions);
|
|
|
|
const testPrompt = "Explain how AI works";
|
|
|
|
async function main() {
|
|
console.log("making request")
|
|
try {
|
|
const result = await model.generateContent(testPrompt);
|
|
console.log(result.response.text());
|
|
} catch (error) {
|
|
console.error('Error details:', {
|
|
name: error.name,
|
|
message: error.message,
|
|
cause: error.cause,
|
|
// Check if there's a network error
|
|
isNetworkError: error instanceof TypeError && error.message === 'fetch failed'
|
|
});
|
|
|
|
// Check if the server is running
|
|
if (error instanceof TypeError && error.message === 'fetch failed') {
|
|
console.error('Make sure your local server is running at http://localhost:4000');
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
async function main_streaming() {
|
|
try {
|
|
const streamingResult = await model.generateContentStream(testPrompt);
|
|
for await (const item of streamingResult.stream) {
|
|
console.log('stream chunk: ', JSON.stringify(item));
|
|
}
|
|
const aggregatedResponse = await streamingResult.response;
|
|
console.log('aggregated response: ', JSON.stringify(aggregatedResponse));
|
|
} catch (error) {
|
|
console.error('Error details:', error);
|
|
}
|
|
}
|
|
|
|
// main();
|
|
main_streaming(); |