diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index cf260f56..b3edc423 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 8b6cd71c-ea04-44da-af45-e43968b5928d management: - docChecksum: 591fccdc6b495b1230644174853f9113 + docChecksum: 8e530fc8f007ea5179129b89d89ba958 docVersion: 1.0.0 speakeasyVersion: 1.666.0 generationVersion: 2.768.0 - releaseVersion: 0.2.6 - configChecksum: faa7e08defaa15a2a216f64d15953590 + releaseVersion: 0.2.9 + configChecksum: 12a255b210945a121402c22f63d8d8e5 repoURL: https://github.com/OpenRouterTeam/typescript-sdk.git installationURL: https://github.com/OpenRouterTeam/typescript-sdk published: true @@ -67,7 +67,6 @@ generatedFiles: - docs/models/chatgenerationtokenusage.md - docs/models/chatmessagecontentitem.md - docs/models/chatmessagecontentitemaudio.md - - docs/models/chatmessagecontentitemaudioformat.md - docs/models/chatmessagecontentitemaudioinputaudio.md - docs/models/chatmessagecontentitemcachecontrol.md - docs/models/chatmessagecontentitemimage.md @@ -108,6 +107,7 @@ generatedFiles: - docs/models/costdetails.md - docs/models/createchargerequest.md - docs/models/datacollection.md + - docs/models/debug.md - docs/models/defaultparameters.md - docs/models/edgenetworktimeoutresponseerrordata.md - docs/models/effort.md @@ -288,7 +288,6 @@ generatedFiles: - docs/models/operations/createembeddingsprovider.md - docs/models/operations/createembeddingsrequest.md - docs/models/operations/createembeddingsresponse.md - - docs/models/operations/createembeddingsresponsebody.md - docs/models/operations/createkeysdata.md - docs/models/operations/createkeyslimitreset.md - docs/models/operations/createkeysrequest.md diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index a4ecc758..2548ae01 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -31,7 +31,7 @@ generation: skipResponseBodyAssertions: false preApplyUnionDiscriminators: true typescript: - version: 0.2.6 + version: 0.2.9 acceptHeaderEnum: false additionalDependencies: dependencies: {} diff --git a/.speakeasy/in.openapi.yaml b/.speakeasy/in.openapi.yaml index 3a2036df..b311b802 100644 --- a/.speakeasy/in.openapi.yaml +++ b/.speakeasy/in.openapi.yaml @@ -4639,14 +4639,6 @@ components: type: string format: type: string - enum: - - wav - - mp3 - - flac - - m4a - - ogg - - pcm16 - - pcm24 required: - data - format @@ -5195,6 +5187,11 @@ components: - type: 'null' user: type: string + debug: + type: object + properties: + echo_upstream_body: + type: boolean required: - messages ChatResponseChoice: @@ -6230,11 +6227,6 @@ paths: - object - data - model - text/event-stream: - schema: - type: string - description: Not used for embeddings - embeddings do not support streaming - x-speakeasy-sse-sentinel: '[DONE]' '400': description: Bad Request - Invalid request parameters or malformed input content: diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 59b3facd..c87413a0 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -4659,15 +4659,6 @@ components: type: string format: type: string - enum: - - wav - - mp3 - - flac - - m4a - - ogg - - pcm16 - - pcm24 - x-speakeasy-unknown-values: allow required: - data - format @@ -5219,6 +5210,11 @@ components: - type: 'null' user: type: string + debug: + type: object + properties: + echo_upstream_body: + type: boolean required: - messages ChatResponseChoice: @@ -6246,11 +6242,6 @@ paths: - object - data - model - text/event-stream: - schema: - type: string - description: Not used for embeddings - embeddings do not support streaming - x-speakeasy-sse-sentinel: '[DONE]' '400': description: Bad Request - Invalid request parameters or malformed input content: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 11d9a2ca..6062d30f 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,20 +2,20 @@ speakeasyVersion: 1.666.0 sources: OpenRouter API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:430fa9a22e960fd04a393c99eb3c967b11b5fbda6b19a104bfcd745efe887df3 - sourceBlobDigest: sha256:c65ea29dcae3bb0b31cba1f207741a8a835620bc6e8921e614a7c371055d850c + sourceRevisionDigest: sha256:697f956356ab0195b9a9b9a5106e4ac979caa551709b3614c723df972c661829 + sourceBlobDigest: sha256:a286a09ceced7f78a685731aef81d1498b89a6a46f3794219dc93fa2d822853b tags: - latest - - updates + - matt-fix-more-types - 1.0.0 targets: openrouter: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:430fa9a22e960fd04a393c99eb3c967b11b5fbda6b19a104bfcd745efe887df3 - sourceBlobDigest: sha256:c65ea29dcae3bb0b31cba1f207741a8a835620bc6e8921e614a7c371055d850c + sourceRevisionDigest: sha256:697f956356ab0195b9a9b9a5106e4ac979caa551709b3614c723df972c661829 + sourceBlobDigest: sha256:a286a09ceced7f78a685731aef81d1498b89a6a46f3794219dc93fa2d822853b codeSamplesNamespace: open-router-chat-completions-api-typescript-code-samples - codeSamplesRevisionDigest: sha256:6f8f3b329dff31738a363e4df0f0c73002798aa996735b46a56968936e65b5f4 + codeSamplesRevisionDigest: sha256:753b0f6f2de1c2d4fec4823c0f552e084d3b4083591c998375074e2d11fc7d6d workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.666.0 diff --git a/docs/models/chatgenerationparams.md b/docs/models/chatgenerationparams.md index c5ec4b35..3b660d98 100644 --- a/docs/models/chatgenerationparams.md +++ b/docs/models/chatgenerationparams.md @@ -40,4 +40,5 @@ let value: ChatGenerationParams = { | `toolChoice` | *any* | :heavy_minus_sign: | N/A | | `tools` | [models.ToolDefinitionJson](../models/tooldefinitionjson.md)[] | :heavy_minus_sign: | N/A | | `topP` | *number* | :heavy_minus_sign: | N/A | -| `user` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file +| `user` | *string* | :heavy_minus_sign: | N/A | +| `debug` | [models.Debug](../models/debug.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitem.md b/docs/models/chatmessagecontentitem.md index da9d3c15..c66c9f77 100644 --- a/docs/models/chatmessagecontentitem.md +++ b/docs/models/chatmessagecontentitem.md @@ -30,7 +30,7 @@ const value: models.ChatMessageContentItemAudio = { type: "input_audio", inputAudio: { data: "", - format: "pcm24", + format: "", }, }; ``` diff --git a/docs/models/chatmessagecontentitemaudio.md b/docs/models/chatmessagecontentitemaudio.md index e72e7a75..5553e7f3 100644 --- a/docs/models/chatmessagecontentitemaudio.md +++ b/docs/models/chatmessagecontentitemaudio.md @@ -9,7 +9,7 @@ let value: ChatMessageContentItemAudio = { type: "input_audio", inputAudio: { data: "", - format: "pcm24", + format: "", }, }; ``` diff --git a/docs/models/chatmessagecontentitemaudioformat.md b/docs/models/chatmessagecontentitemaudioformat.md deleted file mode 100644 index 18ecc154..00000000 --- a/docs/models/chatmessagecontentitemaudioformat.md +++ /dev/null @@ -1,17 +0,0 @@ -# ChatMessageContentItemAudioFormat - -## Example Usage - -```typescript -import { ChatMessageContentItemAudioFormat } from "@openrouter/sdk/models"; - -let value: ChatMessageContentItemAudioFormat = "mp3"; -``` - -## Values - -This is an open enum. Unrecognized values will be captured as the `Unrecognized` branded type. - -```typescript -"wav" | "mp3" | "flac" | "m4a" | "ogg" | "pcm16" | "pcm24" | Unrecognized -``` \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemaudioinputaudio.md b/docs/models/chatmessagecontentitemaudioinputaudio.md index f18856c0..6bc501cd 100644 --- a/docs/models/chatmessagecontentitemaudioinputaudio.md +++ b/docs/models/chatmessagecontentitemaudioinputaudio.md @@ -7,13 +7,13 @@ import { ChatMessageContentItemAudioInputAudio } from "@openrouter/sdk/models"; let value: ChatMessageContentItemAudioInputAudio = { data: "", - format: "wav", + format: "", }; ``` ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `data` | *string* | :heavy_check_mark: | N/A | -| `format` | [models.ChatMessageContentItemAudioFormat](../models/chatmessagecontentitemaudioformat.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `data` | *string* | :heavy_check_mark: | N/A | +| `format` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/debug.md b/docs/models/debug.md new file mode 100644 index 00000000..5e67ef89 --- /dev/null +++ b/docs/models/debug.md @@ -0,0 +1,15 @@ +# Debug + +## Example Usage + +```typescript +import { Debug } from "@openrouter/sdk/models"; + +let value: Debug = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `echoUpstreamBody` | *boolean* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/createembeddingsresponse.md b/docs/models/operations/createembeddingsresponse.md index cfc7f402..c5ec2221 100644 --- a/docs/models/operations/createembeddingsresponse.md +++ b/docs/models/operations/createembeddingsresponse.md @@ -1,21 +1,30 @@ # CreateEmbeddingsResponse +Embedding response -## Supported Types - -### `operations.CreateEmbeddingsResponseBody` +## Example Usage ```typescript -const value: operations.CreateEmbeddingsResponseBody = { +import { CreateEmbeddingsResponse } from "@openrouter/sdk/models/operations"; + +let value: CreateEmbeddingsResponse = { object: "list", - data: [], - model: "Focus", + data: [ + { + object: "embedding", + embedding: "", + }, + ], + model: "Mustang", }; ``` -### `string` - -```typescript -const value: string = ""; -``` +## Fields +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_minus_sign: | N/A | +| `object` | [operations.ObjectT](../../models/operations/objectt.md) | :heavy_check_mark: | N/A | +| `data` | [operations.CreateEmbeddingsData](../../models/operations/createembeddingsdata.md)[] | :heavy_check_mark: | N/A | +| `model` | *string* | :heavy_check_mark: | N/A | +| `usage` | [operations.Usage](../../models/operations/usage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/createembeddingsresponsebody.md b/docs/models/operations/createembeddingsresponsebody.md deleted file mode 100644 index 18423c1d..00000000 --- a/docs/models/operations/createembeddingsresponsebody.md +++ /dev/null @@ -1,25 +0,0 @@ -# CreateEmbeddingsResponseBody - -Embedding response - -## Example Usage - -```typescript -import { CreateEmbeddingsResponseBody } from "@openrouter/sdk/models/operations"; - -let value: CreateEmbeddingsResponseBody = { - object: "list", - data: [], - model: "Focus", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `id` | *string* | :heavy_minus_sign: | N/A | -| `object` | [operations.ObjectT](../../models/operations/objectt.md) | :heavy_check_mark: | N/A | -| `data` | [operations.CreateEmbeddingsData](../../models/operations/createembeddingsdata.md)[] | :heavy_check_mark: | N/A | -| `model` | *string* | :heavy_check_mark: | N/A | -| `usage` | [operations.Usage](../../models/operations/usage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/jsr.json b/jsr.json index c424701f..ed244595 100644 --- a/jsr.json +++ b/jsr.json @@ -2,7 +2,7 @@ { "name": "@openrouter/sdk", - "version": "0.2.6", + "version": "0.2.9", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/package.json b/package.json index 733183f0..fbe5e31f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@openrouter/sdk", - "version": "0.2.6", + "version": "0.2.9", "author": "OpenRouter", "description": "The OpenRouter TypeScript SDK is a type-safe toolkit for building AI applications with access to 300+ language models through a unified API.", "keywords": [ diff --git a/src/funcs/embeddingsGenerate.ts b/src/funcs/embeddingsGenerate.ts index 998f5969..694c08cd 100644 --- a/src/funcs/embeddingsGenerate.ts +++ b/src/funcs/embeddingsGenerate.ts @@ -110,7 +110,7 @@ async function $do( const headers = new Headers(compactMap({ "Content-Type": "application/json", - Accept: "application/json;q=1, text/event-stream;q=0", + Accept: "application/json", })); const secConfig = await extractSecurity(client._options.apiKey); @@ -197,9 +197,6 @@ async function $do( | SDKValidationError >( M.json(200, operations.CreateEmbeddingsResponse$inboundSchema), - M.text(200, operations.CreateEmbeddingsResponse$inboundSchema, { - ctype: "text/event-stream", - }), M.jsonErr(400, errors.BadRequestResponseError$inboundSchema), M.jsonErr(401, errors.UnauthorizedResponseError$inboundSchema), M.jsonErr(402, errors.PaymentRequiredResponseError$inboundSchema), diff --git a/src/lib/config.ts b/src/lib/config.ts index 9414e75a..b5bfa6da 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -69,7 +69,7 @@ export function serverURLFromOptions(options: SDKOptions): URL | null { export const SDK_METADATA = { language: "typescript", openapiDocVersion: "1.0.0", - sdkVersion: "0.2.6", + sdkVersion: "0.2.9", genVersion: "2.768.0", - userAgent: "speakeasy-sdk/typescript 0.2.6 2.768.0 1.0.0 @openrouter/sdk", + userAgent: "speakeasy-sdk/typescript 0.2.9 2.768.0 1.0.0 @openrouter/sdk", } as const; diff --git a/src/models/chatgenerationparams.ts b/src/models/chatgenerationparams.ts index c861290f..a31df171 100644 --- a/src/models/chatgenerationparams.ts +++ b/src/models/chatgenerationparams.ts @@ -71,6 +71,10 @@ export type ChatGenerationParamsResponseFormatUnion = export type ChatGenerationParamsStop = string | Array; +export type Debug = { + echoUpstreamBody?: boolean | undefined; +}; + export type ChatGenerationParams = { messages: Array; model?: string | undefined; @@ -100,6 +104,7 @@ export type ChatGenerationParams = { tools?: Array | undefined; topP?: number | null | undefined; user?: string | undefined; + debug?: Debug | undefined; }; /** @internal */ @@ -246,6 +251,24 @@ export function chatGenerationParamsStopToJSON( ); } +/** @internal */ +export type Debug$Outbound = { + echo_upstream_body?: boolean | undefined; +}; + +/** @internal */ +export const Debug$outboundSchema: z.ZodType = z.object({ + echoUpstreamBody: z.boolean().optional(), +}).transform((v) => { + return remap$(v, { + echoUpstreamBody: "echo_upstream_body", + }); +}); + +export function debugToJSON(debug: Debug): string { + return JSON.stringify(Debug$outboundSchema.parse(debug)); +} + /** @internal */ export type ChatGenerationParams$Outbound = { messages: Array; @@ -276,6 +299,7 @@ export type ChatGenerationParams$Outbound = { tools?: Array | undefined; top_p?: number | null | undefined; user?: string | undefined; + debug?: Debug$Outbound | undefined; }; /** @internal */ @@ -311,6 +335,7 @@ export const ChatGenerationParams$outboundSchema: z.ZodType< tools: z.array(ToolDefinitionJson$outboundSchema).optional(), topP: z.nullable(z.number()).optional(), user: z.string().optional(), + debug: z.lazy(() => Debug$outboundSchema).optional(), }).transform((v) => { return remap$(v, { frequencyPenalty: "frequency_penalty", diff --git a/src/models/chatmessagecontentitemaudio.ts b/src/models/chatmessagecontentitemaudio.ts index fd289562..288f044d 100644 --- a/src/models/chatmessagecontentitemaudio.ts +++ b/src/models/chatmessagecontentitemaudio.ts @@ -5,27 +5,12 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import * as openEnums from "../types/enums.js"; -import { OpenEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ChatMessageContentItemAudioFormat = { - Wav: "wav", - Mp3: "mp3", - Flac: "flac", - M4a: "m4a", - Ogg: "ogg", - Pcm16: "pcm16", - Pcm24: "pcm24", -} as const; -export type ChatMessageContentItemAudioFormat = OpenEnum< - typeof ChatMessageContentItemAudioFormat ->; - export type ChatMessageContentItemAudioInputAudio = { data: string; - format: ChatMessageContentItemAudioFormat; + format: string; }; export type ChatMessageContentItemAudio = { @@ -33,24 +18,13 @@ export type ChatMessageContentItemAudio = { inputAudio: ChatMessageContentItemAudioInputAudio; }; -/** @internal */ -export const ChatMessageContentItemAudioFormat$inboundSchema: z.ZodType< - ChatMessageContentItemAudioFormat, - unknown -> = openEnums.inboundSchema(ChatMessageContentItemAudioFormat); -/** @internal */ -export const ChatMessageContentItemAudioFormat$outboundSchema: z.ZodType< - string, - ChatMessageContentItemAudioFormat -> = openEnums.outboundSchema(ChatMessageContentItemAudioFormat); - /** @internal */ export const ChatMessageContentItemAudioInputAudio$inboundSchema: z.ZodType< ChatMessageContentItemAudioInputAudio, unknown > = z.object({ data: z.string(), - format: ChatMessageContentItemAudioFormat$inboundSchema, + format: z.string(), }); /** @internal */ export type ChatMessageContentItemAudioInputAudio$Outbound = { @@ -64,7 +38,7 @@ export const ChatMessageContentItemAudioInputAudio$outboundSchema: z.ZodType< ChatMessageContentItemAudioInputAudio > = z.object({ data: z.string(), - format: ChatMessageContentItemAudioFormat$outboundSchema, + format: z.string(), }); export function chatMessageContentItemAudioInputAudioToJSON( diff --git a/src/models/operations/createembeddings.ts b/src/models/operations/createembeddings.ts index b533bbad..422746eb 100644 --- a/src/models/operations/createembeddings.ts +++ b/src/models/operations/createembeddings.ts @@ -174,7 +174,7 @@ export type Usage = { /** * Embedding response */ -export type CreateEmbeddingsResponseBody = { +export type CreateEmbeddingsResponse = { id?: string | undefined; object: ObjectT; data: Array; @@ -182,8 +182,6 @@ export type CreateEmbeddingsResponseBody = { usage?: Usage | undefined; }; -export type CreateEmbeddingsResponse = CreateEmbeddingsResponseBody | string; - /** @internal */ export type ImageUrl$Outbound = { url: string; @@ -535,8 +533,8 @@ export function usageFromJSON( } /** @internal */ -export const CreateEmbeddingsResponseBody$inboundSchema: z.ZodType< - CreateEmbeddingsResponseBody, +export const CreateEmbeddingsResponse$inboundSchema: z.ZodType< + CreateEmbeddingsResponse, unknown > = z.object({ id: z.string().optional(), @@ -546,25 +544,6 @@ export const CreateEmbeddingsResponseBody$inboundSchema: z.ZodType< usage: z.lazy(() => Usage$inboundSchema).optional(), }); -export function createEmbeddingsResponseBodyFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => CreateEmbeddingsResponseBody$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'CreateEmbeddingsResponseBody' from JSON`, - ); -} - -/** @internal */ -export const CreateEmbeddingsResponse$inboundSchema: z.ZodType< - CreateEmbeddingsResponse, - unknown -> = z.union([ - z.lazy(() => CreateEmbeddingsResponseBody$inboundSchema), - z.string(), -]); - export function createEmbeddingsResponseFromJSON( jsonString: string, ): SafeParseResult { diff --git a/tests/e2e/callModel.test.ts b/tests/e2e/callModel.test.ts index b9c645ae..6cc2c532 100644 --- a/tests/e2e/callModel.test.ts +++ b/tests/e2e/callModel.test.ts @@ -132,7 +132,7 @@ describe('callModel E2E Tests', () => { expect(toolCalls[0].arguments).toBeDefined(); }, 30000); - it('should work with chat-style messages and chat-style tools together', async () => { + it.skip('should work with chat-style messages and chat-style tools together', async () => { const response = client.callModel({ model: 'meta-llama/llama-3.1-8b-instruct', input: [ diff --git a/tests/e2e/embeddings.test.ts b/tests/e2e/embeddings.test.ts index 8db60466..8fc8a103 100644 --- a/tests/e2e/embeddings.test.ts +++ b/tests/e2e/embeddings.test.ts @@ -25,30 +25,29 @@ describe('Embeddings E2E Tests', () => { expect(response).toBeDefined(); // Check if response is an object (not a string) - if (typeof response === 'object') { - expect(response.data).toBeDefined(); - expect(Array.isArray(response.data)).toBe(true); - expect(response.data.length).toBeGreaterThan(0); - - const firstEmbedding = response.data[0]; - expect(firstEmbedding).toBeDefined(); - expect(firstEmbedding?.embedding).toBeDefined(); - - // Handle both array and base64 string embeddings - if (Array.isArray(firstEmbedding?.embedding)) { - expect(firstEmbedding.embedding.length).toBeGreaterThan(0); - // Verify embedding values are numbers - const firstValue = firstEmbedding.embedding[0]; - expect(typeof firstValue).toBe('number'); - } else { - expect(typeof firstEmbedding?.embedding).toBe('string'); - } + expect(response.data).toBeDefined(); + expect(Array.isArray(response.data)).toBe(true); + expect(response.data.length).toBeGreaterThan(0); + + const firstEmbedding = response.data[0]; + expect(firstEmbedding).toBeDefined(); + expect(firstEmbedding?.embedding).toBeDefined(); + + // Handle both array and base64 string embeddings + if (Array.isArray(firstEmbedding?.embedding)) { + expect(firstEmbedding.embedding.length).toBeGreaterThan(0); + // Verify embedding values are numbers + const firstValue = firstEmbedding.embedding[0]; + expect(typeof firstValue).toBe('number'); + } else { + expect(typeof firstEmbedding?.embedding).toBe('string'); + } - // Verify usage information if available - if (response.usage) { - expect(response.usage.totalTokens).toBeGreaterThan(0); - } + // Verify usage information if available + if (response.usage) { + expect(response.usage.totalTokens).toBeGreaterThan(0); } + }); it('should generate embeddings for multiple text inputs', async () => { @@ -65,25 +64,24 @@ describe('Embeddings E2E Tests', () => { expect(response).toBeDefined(); - if (typeof response === 'object') { - expect(response.data).toBeDefined(); - expect(Array.isArray(response.data)).toBe(true); - expect(response.data.length).toBe(inputs.length); + expect(response.data).toBeDefined(); + expect(Array.isArray(response.data)).toBe(true); + expect(response.data.length).toBe(inputs.length); - // Verify each embedding - response.data.forEach((embedding, index) => { - expect(embedding).toBeDefined(); - expect(embedding?.embedding).toBeDefined(); + // Verify each embedding + response.data.forEach((embedding, index) => { + expect(embedding).toBeDefined(); + expect(embedding?.embedding).toBeDefined(); - if (Array.isArray(embedding?.embedding)) { - expect(embedding.embedding.length).toBeGreaterThan(0); - } else { - expect(typeof embedding?.embedding).toBe('string'); - } + if (Array.isArray(embedding?.embedding)) { + expect(embedding.embedding.length).toBeGreaterThan(0); + } else { + expect(typeof embedding?.embedding).toBe('string'); + } - expect(embedding?.index).toBe(index); - }); - } + expect(embedding?.index).toBe(index); + }); + }); it('should generate consistent embedding dimensions', async () => { @@ -97,20 +95,18 @@ describe('Embeddings E2E Tests', () => { expect(response).toBeDefined(); - if (typeof response === 'object') { - expect(response.data.length).toBe(2); + expect(response.data.length).toBe(2); - const firstEmbedding = response.data[0]?.embedding; - const secondEmbedding = response.data[1]?.embedding; + const firstEmbedding = response.data[0]?.embedding; + const secondEmbedding = response.data[1]?.embedding; - // Only check dimensions if both are arrays - if (Array.isArray(firstEmbedding) && Array.isArray(secondEmbedding)) { - const firstDimension = firstEmbedding.length; - const secondDimension = secondEmbedding.length; + // Only check dimensions if both are arrays + if (Array.isArray(firstEmbedding) && Array.isArray(secondEmbedding)) { + const firstDimension = firstEmbedding.length; + const secondDimension = secondEmbedding.length; - expect(firstDimension).toBe(secondDimension); - expect(firstDimension).toBeGreaterThan(0); - } + expect(firstDimension).toBe(secondDimension); + expect(firstDimension).toBeGreaterThan(0); } }); @@ -122,14 +118,12 @@ describe('Embeddings E2E Tests', () => { expect(response).toBeDefined(); - if (typeof response === 'object') { - expect(response.data).toBeDefined(); - expect(Array.isArray(response.data)).toBe(true); + expect(response.data).toBeDefined(); + expect(Array.isArray(response.data)).toBe(true); - if (response.data.length > 0) { - const embedding = response.data[0]; - expect(embedding?.embedding).toBeDefined(); - } + if (response.data.length > 0) { + const embedding = response.data[0]; + expect(embedding?.embedding).toBeDefined(); } }); @@ -142,18 +136,17 @@ describe('Embeddings E2E Tests', () => { expect(response).toBeDefined(); - if (typeof response === 'object') { - expect(response.model).toBeDefined(); - expect(typeof response.model).toBe('string'); + expect(response.model).toBeDefined(); + expect(typeof response.model).toBe('string'); - if (response.usage) { - expect(response.usage.promptTokens).toBeDefined(); - expect(response.usage.totalTokens).toBeDefined(); - expect(typeof response.usage.promptTokens).toBe('number'); - expect(typeof response.usage.totalTokens).toBe('number'); - expect(response.usage.totalTokens).toBeGreaterThan(0); - } + if (response.usage) { + expect(response.usage.promptTokens).toBeDefined(); + expect(response.usage.totalTokens).toBeDefined(); + expect(typeof response.usage.promptTokens).toBe('number'); + expect(typeof response.usage.totalTokens).toBe('number'); + expect(response.usage.totalTokens).toBeGreaterThan(0); } + }); }); });