




















@@ -224,37 +224,69 @@ function buildCohereBody(
224224// Response parsers
225225// ---------------------------------------------------------------------------
226226227+type BedrockEmbeddingResponseJson = {
228+embedding?: unknown;
229+embeddings?: unknown;
230+data?: unknown;
231+};
232+233+function parseBedrockEmbeddingResponseJson(raw: string): BedrockEmbeddingResponseJson {
234+try {
235+const parsed = JSON.parse(raw) as unknown;
236+return parsed && typeof parsed === "object" && !Array.isArray(parsed)
237+ ? (parsed as BedrockEmbeddingResponseJson)
238+ : {};
239+} catch {
240+throw new Error("Amazon Bedrock embedding response returned malformed JSON");
241+}
242+}
243+244+function asNumberArray(value: unknown): number[] {
245+return Array.isArray(value) ? (value as number[]) : [];
246+}
247+248+function asNumberArrayBatch(value: unknown): number[][] {
249+return Array.isArray(value) ? (value.filter(Array.isArray) as number[][]) : [];
250+}
251+227252function parseSingle(family: Family, raw: string): number[] {
228-const data = JSON.parse(raw);
253+const data = parseBedrockEmbeddingResponseJson(raw);
229254switch (family) {
230255case "nova":
231-return data.embeddings?.[0]?.embedding ?? [];
256+return asNumberArray(Array.isArray(data.embeddings) ? data.embeddings[0]?.embedding : null);
232257case "twelvelabs": {
233258if (Array.isArray(data.data)) {
234-return data.data[0]?.embedding ?? [];
259+return asNumberArray(data.data[0]?.embedding);
235260}
236-if (Array.isArray(data.data?.embedding)) {
237-return data.data.embedding;
261+if (data.data && typeof data.data === "object") {
262+return asNumberArray((data.data as { embedding?: unknown }).embedding);
238263}
239-return data.embedding ?? [];
264+return asNumberArray(data.embedding);
240265}
241266default:
242-return data.embedding ?? [];
267+return asNumberArray(data.embedding);
243268}
244269}
245270246271function parseCohereBatch(family: Family, raw: string): number[][] {
247-const data = JSON.parse(raw);
272+const data = parseBedrockEmbeddingResponseJson(raw);
248273const embeddings = data.embeddings;
249274if (!embeddings) {
250275return [];
251276}
252277if (family === "cohere-v4" && !Array.isArray(embeddings)) {
253-return embeddings.float ?? [];
278+return embeddings && typeof embeddings === "object"
279+ ? asNumberArrayBatch((embeddings as { float?: unknown }).float)
280+ : [];
254281}
255-return embeddings;
282+return asNumberArrayBatch(embeddings);
256283}
257284285+export const __testing = {
286+ parseCohereBatch,
287+ parseSingle,
288+};
289+258290// ---------------------------------------------------------------------------
259291// Provider
260292// ---------------------------------------------------------------------------
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。