-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
The type for CreateEmbeddingsResponse is a union of CreateEmbeddingsResponseBody and string.
Source from createembeddings.d.ts:
/**
* Embedding response
*/
export type CreateEmbeddingsResponseBody = {
id?: string | undefined;
object: ObjectT;
data: Array<CreateEmbeddingsData>;
model: string;
usage?: Usage | undefined;
};
export type CreateEmbeddingsResponse = CreateEmbeddingsResponseBody | string;This requires developers to handle both cases when implementing the sdk. Additionally, CreateEmbeddingsData is typed as string | number[], which again requires handling the string case.
Here is an example of this:
export const generateEmbeddingBad = async (text: string): Promise<number[]> => {
const embedding = await openrouter.embeddings.generate({
model: "google/gemini-embedding-001",
input: text,
encodingFormat: "float",
});
// Need to handle a string only response
if (typeof embedding === "string") {
throw new Error("Invalid embedding response");
}
// Need to ensure embedding is an array of numbers
if (!Array.isArray(embedding.data[0].embedding)) {
throw new Error("Invalid embedding response");
}
return embedding.data[0].embedding;
};Ideally, using the sdk for embeddings would look more like this:
export const generateEmbeddingGood = async (text: string): Promise<number[]> => {
const embedding = await openrouter.embeddings.generate({
model: "google/gemini-embedding-001",
input: text,
encodingFormat: "float",
});
return embedding.data[0].embedding;
};nikitawagner
Metadata
Metadata
Assignees
Labels
No labels