Feat : Skills
This commit is contained in:
42
open-sse/handlers/embeddingProviders/gemini.js
Normal file
42
open-sse/handlers/embeddingProviders/gemini.js
Normal file
@@ -0,0 +1,42 @@
|
||||
// Google Gemini embeddings — embedContent / batchEmbedContents
|
||||
const BASE = "https://generativelanguage.googleapis.com/v1beta";
|
||||
|
||||
function modelPath(model) {
|
||||
return model.startsWith("models/") ? model : `models/${model}`;
|
||||
}
|
||||
|
||||
export default {
|
||||
buildUrl: (model, creds, { input } = {}) => {
|
||||
const apiKey = creds.apiKey || creds.accessToken;
|
||||
const path = modelPath(model);
|
||||
const op = Array.isArray(input) ? "batchEmbedContents" : "embedContent";
|
||||
return `${BASE}/${path}:${op}?key=${encodeURIComponent(apiKey)}`;
|
||||
},
|
||||
buildHeaders: () => ({ "Content-Type": "application/json" }),
|
||||
buildBody: (model, { input }) => {
|
||||
const m = modelPath(model);
|
||||
if (Array.isArray(input)) {
|
||||
return { requests: input.map((text) => ({ model: m, content: { parts: [{ text: String(text) }] } })) };
|
||||
}
|
||||
return { model: m, content: { parts: [{ text: String(input) }] } };
|
||||
},
|
||||
normalize: (responseBody, model) => {
|
||||
if (responseBody.object === "list" && Array.isArray(responseBody.data)) return responseBody;
|
||||
let items = [];
|
||||
if (Array.isArray(responseBody.embeddings)) {
|
||||
items = responseBody.embeddings.map((emb, idx) => ({
|
||||
object: "embedding",
|
||||
index: idx,
|
||||
embedding: emb.values || [],
|
||||
}));
|
||||
} else if (responseBody.embedding?.values) {
|
||||
items = [{ object: "embedding", index: 0, embedding: responseBody.embedding.values }];
|
||||
}
|
||||
return {
|
||||
object: "list",
|
||||
data: items,
|
||||
model,
|
||||
usage: { prompt_tokens: 0, total_tokens: 0 },
|
||||
};
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user