@byte_fluffy/nexra-sdk 0.1.0-alpha.3 → 0.1.0-alpha.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,14 +9,14 @@ npm install @byte_fluffy/nexra-sdk@next
9
9
  ```
10
10
 
11
11
  ```ts
12
- import { createNexra, getModelSpec } from "@byte_fluffy/nexra-sdk";
12
+ import { createNexra, getModelSpec, type NexraImageGenerateInput } from "@byte_fluffy/nexra-sdk";
13
13
 
14
14
  const nexra = createNexra({ apiKey: process.env.NEXRA_API_KEY });
15
- const spec = getModelSpec("gpt-image-2");
16
- const input = {
17
- model: spec!.id,
18
- prompt: "A paper boat on a blue table",
19
- size: "1024x1024",
15
+ const spec = getModelSpec("openai/gpt-image-2");
16
+ const input: NexraImageGenerateInput = {
17
+ content: [{ type: "text", text: "A paper boat on a blue table", role: "prompt" }],
18
+ resolution: "1k",
19
+ aspect_ratio: "1:1",
20
20
  quality: "medium",
21
21
  };
22
22
  const quote = await nexra.catalog.quote({
@@ -24,12 +24,318 @@ const quote = await nexra.catalog.quote({
24
24
  operation: "image.generate",
25
25
  input,
26
26
  });
27
- const result = await nexra.run(spec!.id, { input, quoteToken: quote.quoteToken });
27
+ const result = await nexra.run(spec!.id, input, { quoteToken: quote.quoteToken });
28
28
  ```
29
29
 
30
+ Media apps send the versioned Nexra category contract: ordered `content` parts plus
31
+ the common parameters for `image.generate`, `video.generate`, `audio.generate` or
32
+ `image.upscale`. The server resolves the selected model component and explicitly
33
+ adapts that input to the channel Provider. The SDK does not expose or emulate
34
+ Provider-native endpoints. Protocol constants, schemas and types are also
35
+ available from `@byte_fluffy/nexra-sdk/media`.
36
+
30
37
  The default API base URL is `https://api.nexra-ai.com/v1`. When overriding
31
38
  `baseUrl`, include the `/v1` API prefix.
32
39
 
40
+ ## Error contract migration
41
+
42
+ `0.1.0-alpha.30` introduces the flat public error response and matching SDK
43
+ types and exception getters. Existing HTTP envelopes and historical Task
44
+ objects remain supported as described below.
45
+
46
+ New Nexra responses keep one platform request context at the root:
47
+ `nexraRequestId` and `nexraHttpStatus`. Platform classification is
48
+ `nexraError: { code, message, param? }`. Provider context uses the independent
49
+ root fields `upstreamHttpStatus`, `upstreamRequestId` and `upstreamError`.
50
+ Successful Task receipts and results can carry the platform context without
51
+ an error. New Task results do not duplicate the old `requestId` or `error`
52
+ wrapper. The SDK's exported `Task` and `TaskPage` types describe these public
53
+ results, not the server's internal Task read model.
54
+
55
+ `NexraApiError.status` remains the actual fetch response status. Its read-only
56
+ `code` getter and inherited `message` expose the server's platform classification;
57
+ `nexraError` retains that classification object. Both exception types expose
58
+ `nexraHttpStatus`, `nexraRequestId`, `upstreamHttpStatus`, `upstreamRequestId` and
59
+ `upstreamError`. `NexraTaskError` derives these fields and `taskId` from its
60
+ retained `task`, and has no fetch `status`.
61
+
62
+ Platform HTTP status and request ID describe the same originating request.
63
+ A failed Task can retain its original creation HTTP 202 while a later GET
64
+ returns HTTP 200; its provider might separately return HTTP 400. Missing origin
65
+ evidence is omitted, not inferred from Task failure or a later query. The
66
+ SDK preserves server messages and unknown code strings without localizing or
67
+ reclassifying them. Set `Accept-Language: zh-CN` or `en` through existing client
68
+ `headers` when needed.
69
+
70
+ The SDK accepts old HTTP envelopes and Task error fields internally. Deprecated
71
+ `requestId` and `details` exception getters return `nexraRequestId` and the
72
+ parameter context, without adding serialized aliases. Use `nexraError.param`
73
+ for new parameter handling. Public retry/category hints are removed; the SDK
74
+ no longer exposes `NexraApiError.retryable`.
75
+
76
+ `upstreamError` contains captured provider error content. When an older captured
77
+ body has its own `error` member, input normalization selects that member once;
78
+ otherwise it retains the complete captured error body. An already canonical
79
+ `upstreamError` is not unwrapped again. Provider fields named `requestId`,
80
+ `httpStatus`, `retryable` or `category` remain unchanged. Diagnostic flags such
81
+ as `upstreamRedacted`, `upstreamTruncated`, `upstreamUnavailableReason`,
82
+ `upstreamFormat` and `upstreamEvent` remain available when supplied by the server.
83
+ This diagnostic projection does not rewrite original Native HTTP responses or
84
+ Task outputs.
85
+
86
+ Against older servers, `tasks.get`, `list`, `watch`, `wait` and
87
+ `NexraTaskError.task` retain original Task/Event objects and their historical
88
+ fields. Only exception getters adapt the input shape; the SDK does not clean
89
+ returned objects or manufacture context for old successful responses.
90
+
91
+ HTTP retry behavior is unchanged: eligible HTTP 503 requests make at most three
92
+ attempts by default, and `maxRetries: 0` makes one attempt. Retry decisions use
93
+ the actual fetch status rather than platform or provider payload metadata.
94
+ Retried Task creation keeps the same idempotency key and payload; failed Tasks
95
+ throw `NexraTaskError` without submitting another generation.
96
+ `NexraWaitTimeoutError` remains a local wait timeout with the original `taskId`
97
+ and does not mean generation failed.
98
+
99
+ ## Model display names
100
+
101
+ `getModelSpec`, `listModelSpecs`, `nexra.models.search`, `nexra.models.get`, and
102
+ `nexra.catalog.model` return display names with spaces between words and
103
+ capitalized initials, such as
104
+ `Grok Imagine Image`, `GPT 5.4`, and `Wan 2.7 Image Pro`. Brand spelling, acronyms,
105
+ and decimal versions are preserved. Model detail family versions follow the same
106
+ format.
107
+
108
+ Use `formatModelDisplayName(name)` to apply this format to other display labels.
109
+ It is available from the package root and `/catalog`. Formatting affects only
110
+ `displayName`: use the static catalog's `id`, model discovery's `slug`, or the
111
+ live catalog's `modelId` for requests, never the formatted display name.
112
+
113
+ ## Live model catalog
114
+
115
+ `getModelSpec` and `listModelSpecs` read the catalog bundled with this SDK release.
116
+ Use `catalog.model(publicId, operation)` to read the currently published database
117
+ input schema, display name, sale prices and actual model revision. A successful
118
+ `available: false` response authoritatively confirms an unavailable or retired
119
+ public identity; HTTP failures throw and must preserve the last successful value.
120
+ An unknown identity returns 404. Model IDs are URL-encoded by the SDK.
121
+
122
+ `catalog.changes` lists lightweight public model/operation identities and their
123
+ latest revisions. Start with `after: "0"` for initial alignment. Keep the first
124
+ page's `revision` as `upper` for every remaining page and pass its opaque
125
+ `nextCursor`. The cursor is bound to that `after`/`upper` window. Revisions are
126
+ 64-bit decimal strings; compare them with `BigInt`, not JavaScript numbers.
127
+
128
+ ```ts
129
+ let after = "0";
130
+ let cursor: string | undefined;
131
+ let upper: string | undefined;
132
+ do {
133
+ const page = await nexra.catalog.changes({ after, upper, cursor });
134
+ upper ??= page.revision;
135
+ // Record changed identities for independent background model reads.
136
+ enqueueChanges(page.data);
137
+ cursor = page.nextCursor;
138
+ } while (cursor);
139
+ after = upper!;
140
+
141
+ for await (const event of nexra.catalog.events({ after, signal })) {
142
+ enqueueChanges(event.data);
143
+ after = event.revision;
144
+ }
145
+ ```
146
+
147
+ `enqueueChanges` is application code that records the affected identities before
148
+ advancing the receiving cursor; it does not block on all model reads. Each model
149
+ response carries its own actual revision. Do not label an older response with the
150
+ requested target revision or let it overwrite newer state. An identity updated
151
+ beyond a page window's fixed upper bound appears in the next window, including
152
+ when its index row was replaced during pagination.
153
+
154
+ `catalog.events` opens one authenticated SSE stream, ignores heartbeats, and
155
+ emits complete `catalog.quote-context.changed` windows with `{ revision,
156
+ changedAt, data }`. Notifications wake the API instance immediately; a per-instance
157
+ 60-second revision check recovers silent notification loss. When a stream ends or
158
+ throws, the application reconnects using its retained `after` cursor; the SDK
159
+ does not reconnect automatically. Abort the supplied signal to stop an active
160
+ read. Leaving the iterator cancels and releases the response stream. Keep cached
161
+ values and cursors separate for different API sources and authorization identities.
162
+ No credentials, channel costs or user discounts are included in the public events.
163
+
164
+ ## Private ElevenLabs voices
165
+
166
+ Voice design uses `elevenlabs/eleven_multilingual_ttv_v2`, with exactly one prompt
167
+ and one script content part. Preview IDs remain in `task.output.previews`; the
168
+ corresponding audio is returned in the ordered persisted `task.assets` list.
169
+
170
+ ```ts
171
+ const design = await nexra.run("elevenlabs/eleven_multilingual_ttv_v2", {
172
+ content: [
173
+ { type: "text", role: "prompt", text: "A warm, clear and natural narrator voice." },
174
+ { type: "text", role: "script", text: previewScript },
175
+ ],
176
+ }, { idempotencyKey: designKey });
177
+ const creation = await nexra.voices.create({
178
+ name: "Narrator",
179
+ source: { kind: "design", taskId: design.task.id, previewId: selectedPreviewId },
180
+ }, { idempotencyKey: saveKey });
181
+ await nexra.tasks.wait(creation.taskId);
182
+ const voice = await nexra.voices.get(creation.voice.id);
183
+ ```
184
+
185
+ Cloning is a voice-resource operation, not a separate vendor model. Upload owned
186
+ audio through `nexra.assets.upload`, then call `nexra.voices.create` with
187
+ `source: { kind: "clone", samples: [sample.id] }`. The service accepts one to five
188
+ stored audio samples totaling at most 25 MiB. Retain the sample IDs and the same
189
+ idempotency key when retrying a creation.
190
+
191
+ `nexra.voices.list` and `get` read current authenticated resource state. Only an
192
+ active voice can be used for `elevenlabs/eleven_multilingual_v2` speech, using its
193
+ public `voice_` ID. Creation and synthesis settle separately; creation does not
194
+ imply verification or support for renewal, deletion, or voice conversion.
195
+
196
+ Applications using a shared API key must enforce their own end-user ownership
197
+ before reading or consuming a resource; API-key ownership covers the Nexra
198
+ account, not an application's individual users. Published model choices are
199
+ available through `nexra.models.resources(modelId, resource)`.
200
+
33
201
  Static catalog APIs are also available from `@byte_fluffy/nexra-sdk/catalog`.
34
202
  Exact non-negative decimal helpers are available from
35
203
  `@byte_fluffy/nexra-sdk/decimal`.
204
+
205
+ The static catalog includes 14 Agnes and CTYun image/video model
206
+ contracts. A catalog entry describes parameters; it does not grant access to a
207
+ private model or publish a sale price. Check the selected environment's model
208
+ listing and current prices before submitting a task.
209
+
210
+ Agnes Video 2.5 Flash uses the same video Task input format as Seedance, with
211
+ model-specific limits: `resolution: "720P"`, integer `duration` from 4 to 12,
212
+ up to 5 reference images and 3 reference audio clips, and no video references.
213
+ Keyframes use image content parts with `role: "first_frame"` or `"last_frame"`;
214
+ they cannot be combined with reference media in the same request.
215
+
216
+ ```ts
217
+ const flashInput = {
218
+ content: [{ type: "text", text: "A paper boat floats across a sunlit pond", role: "prompt" }],
219
+ duration: 4,
220
+ resolution: "720P",
221
+ aspect_ratio: "16:9",
222
+ };
223
+ const flashQuote = await nexra.catalog.quote({
224
+ modelId: "agnes/agnes-video-2-5-flash",
225
+ operation: "video.generate",
226
+ input: flashInput,
227
+ });
228
+ const flashResult = await nexra.run("agnes/agnes-video-2-5-flash", flashInput, {
229
+ quoteToken: flashQuote.quoteToken,
230
+ });
231
+ ```
232
+
233
+ ## Native language models
234
+
235
+ The optional `@byte_fluffy/nexra-sdk/language` entrypoint returns AI SDK
236
+ `LanguageModelV4` models. Install its optional provider peers when using this
237
+ entrypoint; the core SDK and media entrypoints do not load them. These provider
238
+ versions require Node.js 22 or a supported Bun runtime:
239
+
240
+ ```sh
241
+ npm install @ai-sdk/provider@^4.0.2 @ai-sdk/provider-utils@^5.0.21 \
242
+ @ai-sdk/openai@^4.0.11 @ai-sdk/anthropic@^4.0.30 @ai-sdk/google@^4.0.12 ai@^7
243
+ ```
244
+
245
+ ```ts
246
+ import { generateText, streamText } from "ai";
247
+ import { getLanguageModelBinding } from "@byte_fluffy/nexra-sdk/catalog";
248
+ import { createNexraLanguageModel } from "@byte_fluffy/nexra-sdk/language";
249
+
250
+ const modelId = "openai/gpt-6-sol";
251
+ const binding = getLanguageModelBinding(modelId);
252
+ const model = createNexraLanguageModel(modelId, {
253
+ apiKey: process.env.NEXRA_API_KEY!,
254
+ });
255
+
256
+ if (binding.supportsStreaming) {
257
+ const result = streamText({ model, prompt: "Explain a paper boat", maxRetries: 0 });
258
+ for await (const text of result.textStream) process.stdout.write(text);
259
+ } else {
260
+ const result = await generateText({ model, prompt: "Explain a paper boat", maxRetries: 0 });
261
+ console.log(result.text);
262
+ }
263
+ ```
264
+
265
+ The binding selects a declared native endpoint, preferring Gemini, Responses,
266
+ Chat Completions, then Messages. Pass `protocol` to choose another endpoint
267
+ declared by that model. Native endpoint `inputSchema` and `outputSchema` describe
268
+ wire parameters; language operation schemas may describe Playground inputs.
269
+ `binding.maxOutputTokens` is the lower of the model capability and selected
270
+ native endpoint limit. Messages requests validate the combined visible and
271
+ thinking token budget before sending; explicit budgets are never clamped.
272
+ The SDK does not wrap text requests in media Tasks or retry generations.
273
+
274
+ Messages, tool history and ordered content parts use the AI SDK prompt contract.
275
+ Chat Completions supports declared image/video/audio URLs and inline MP3, WAV,
276
+ AAC and M4A audio without downloading URLs or changing codecs. Native model results and stream finish events retain `usage.raw`, including
277
+ cache and modality details. With AI SDK 7, read `result.finalStep.usage.raw`
278
+ or each step callback's usage. Aggregate `result.usage` and `totalUsage` do not
279
+ retain raw records.
280
+
281
+ Chat native extension fields are passed under `providerOptions.nexra`;
282
+ Responses uses `openai`, Messages uses `anthropic`, and Gemini uses `google`.
283
+ Explicit provider options are preserved. Model identity and prompt/stream
284
+ fields stay owned by the SDK. Kimi K2.5 currently declares synchronous Chat
285
+ Completions only, so use `generateText` for that model.
286
+
287
+ Responses defaults to `store: false` in this SDK so each request replays the full
288
+ conversation and encrypted reasoning instead of relying on stored item IDs.
289
+ Pass `providerOptions.openai.store: true` explicitly for a stored conversation.
290
+ The current Responses provider cannot preserve sampling parameters alongside
291
+ reasoning for canonical Nexra IDs. Explicit `temperature` or `topP` therefore
292
+ fails before sending instead of being silently discarded. A caller may select
293
+ `forceReasoning: false` for sampling without explicit reasoning controls.
294
+ The documented provider version floors are tested; Anthropic budget validation
295
+ uses its exported capability helper and the shared provider budget mapper.
296
+
297
+ Use `resolveNexraLanguageReasoning(modelId, { enabled: false })` from `/catalog`
298
+ for a quiet generation policy. Its `providerOptions` select a declared off mode
299
+ or the model's minimum reasoning effort; `canDisable` distinguishes those cases.
300
+ An explicit AI SDK `reasoning: "none"` is rejected when the native model requires
301
+ reasoning, rather than being changed silently. Explicit provider options take
302
+ precedence over shared reasoning defaults.
303
+
304
+ GPT-6 Sol and GPT-6 Luna are included in the language model catalog. Sale prices
305
+ are not bundled into the SDK; use the current prices published by the selected
306
+ Nexra environment:
307
+
308
+ ```ts
309
+ const { prices } = await nexra.catalog.listPrices();
310
+ const gpt6Prices = prices.filter(({ modelId }) =>
311
+ modelId === "openai/gpt-6-sol" || modelId === "openai/gpt-6-luna"
312
+ );
313
+ ```
314
+
315
+ ## Directory layout
316
+
317
+ ```
318
+ src/
319
+ index.ts Public entry; re-exports the catalog, client, etc.
320
+ catalog/
321
+ index.ts CatalogClient, getModelSpec, listModelSpecs
322
+ generated/ Generated artifacts (committed; required to publish)
323
+ image.generated.json Image model specs
324
+ language.generated.json Text/language model specs
325
+ index.ts Imports every kind JSON and exports the merged array
326
+ generated/
327
+ version.generated.ts SDK_VERSION used by the transport
328
+ ... client, tasks, assets, input, sse, webhooks, errors, ...
329
+ scripts/
330
+ generate-public-catalog.ts Projects models from @nexra/models and writes
331
+ src/catalog/generated/*
332
+ ```
333
+
334
+ ### Adding a model spec
335
+
336
+ 1. Add its ID to `SDK_MODEL_IDS` in `scripts/generate-public-catalog.ts`.
337
+ 2. Run `bun run generate` (from `packages/sdk`).
338
+ 3. The script groups projected models by `model.kind`, writes one
339
+ `src/catalog/generated/<kind>.generated.json` per kind (new kinds appear
340
+ automatically), regenerates the merging `index.ts`, and bumps
341
+ `src/generated/version.generated.ts`. No hand-written code changes.
@@ -0,0 +1,61 @@
1
+ import { a as JsonObject } from './json-Cz0MkWQn.js';
2
+
3
+ declare const MEDIA_KINDS: readonly ["image", "video", "audio", "document", "archive", "other"];
4
+ type MediaKind = (typeof MEDIA_KINDS)[number];
5
+ type MediaAssetStatus = "pending" | "ready" | "failed" | "deleted";
6
+ interface MediaAsset {
7
+ id: string;
8
+ kind: MediaKind;
9
+ status: MediaAssetStatus;
10
+ source: "upload" | "generated" | "provider" | "imported";
11
+ name?: string;
12
+ mimeType?: string;
13
+ sizeBytes?: number;
14
+ width?: number;
15
+ height?: number;
16
+ durationMs?: number;
17
+ checksumSha256?: string;
18
+ url?: string;
19
+ downloadUrl?: string;
20
+ expiresAt?: string;
21
+ metadata?: JsonObject;
22
+ createdAt: string;
23
+ }
24
+ interface AssetReference {
25
+ assetId: string;
26
+ }
27
+ type AssetInput = AssetReference | Blob | File | MediaAsset | string | URL;
28
+ interface AssetUploadOptions {
29
+ kind?: MediaKind;
30
+ name?: string;
31
+ signal?: AbortSignal;
32
+ }
33
+ interface AssetImportRequest {
34
+ url: string;
35
+ kind?: MediaKind;
36
+ name?: string;
37
+ }
38
+ type AssetCertificationProvider = "seedance";
39
+ type AssetCertificationStatus = "processing" | "ready" | "failed";
40
+ interface AssetCertification {
41
+ assetId: string;
42
+ provider: AssetCertificationProvider;
43
+ status: AssetCertificationStatus;
44
+ providerAssetId?: string;
45
+ assetUri?: string;
46
+ groupId?: string;
47
+ library: "general" | "liveness";
48
+ error?: string;
49
+ createdAt: string;
50
+ updatedAt: string;
51
+ }
52
+ interface AssetCertificationRequest {
53
+ library?: "general" | "liveness";
54
+ }
55
+ interface AssetCertificationWaitOptions {
56
+ pollIntervalMs?: number;
57
+ timeoutMs?: number;
58
+ signal?: AbortSignal;
59
+ }
60
+
61
+ export { type AssetImportRequest as A, MEDIA_KINDS as M, type AssetInput as a, type AssetReference as b, type AssetUploadOptions as c, type MediaAsset as d, type MediaAssetStatus as e, type MediaKind as f, type AssetCertificationRequest as g, type AssetCertification as h, type AssetCertificationWaitOptions as i };
package/dist/catalog.d.ts CHANGED
@@ -1 +1,44 @@
1
- export { d as CatalogClient, h as CreateNexraQuoteRequest, u as NexraBillingCurrency, v as NexraModelOperation, w as NexraModelSpec, x as NexraModelSpecFilter, y as NexraQuote, z as NexraSalePrice, N as NexraSettlement, R as getModelSpec, V as listModelSpecs } from './catalog-mytCeh5t.js';
1
+ import { a as JsonObject } from './json-Cz0MkWQn.js';
2
+ import { H as HttpTransport, A as NexraCatalogChangeParams, B as NexraCatalogChangePage, D as NexraCatalogModelState, u as NexraSalePriceList, d as CreateNexraQuoteRequest, s as NexraQuote, C as CreateNexraDisplayQuoteBatchRequest, n as NexraDisplayQuoteBatch, m as NexraCatalogRevision, q as NexraModelSpec, E as NexraModelEndpointSpec, r as NexraModelSpecFilter } from './media-geometry-DAVFGry1.js';
3
+ export { e as MediaGeometryField, f as MediaGeometryProjection, l as NexraBillingCurrency, G as NexraCatalogModelIdentity, p as NexraModelOperation, t as NexraSalePrice, v as NexraSettlement, U as UnifiedMediaGeometry, w as applyMediaGeometry, x as decodeMediaGeometry, y as encodeMediaGeometry, z as projectMediaGeometry } from './media-geometry-DAVFGry1.js';
4
+
5
+ declare function formatModelDisplayName(displayName: string): string;
6
+
7
+ declare class CatalogClient {
8
+ private readonly transport;
9
+ constructor(transport: HttpTransport);
10
+ changes(params?: NexraCatalogChangeParams, signal?: AbortSignal): Promise<NexraCatalogChangePage>;
11
+ model(modelId: string, operation: string, signal?: AbortSignal): Promise<NexraCatalogModelState>;
12
+ events(options?: {
13
+ after?: string;
14
+ signal?: AbortSignal;
15
+ }): AsyncGenerator<NexraCatalogChangePage>;
16
+ listPrices(signal?: AbortSignal): Promise<NexraSalePriceList>;
17
+ quote(request: CreateNexraQuoteRequest, signal?: AbortSignal): Promise<NexraQuote>;
18
+ quoteBatch(request: CreateNexraDisplayQuoteBatchRequest, signal?: AbortSignal): Promise<NexraDisplayQuoteBatch>;
19
+ revision(signal?: AbortSignal): Promise<NexraCatalogRevision>;
20
+ }
21
+ declare function getModelSpec(modelId: string): NexraModelSpec | undefined;
22
+ declare function listModelSpecs(filter?: NexraModelSpecFilter): readonly NexraModelSpec[];
23
+ type NexraLanguageProtocol = "gemini-generate-content" | "openai-responses" | "openai-chat-completions" | "anthropic-messages";
24
+ type NexraLanguageModelBinding = Readonly<{
25
+ spec: NexraModelSpec;
26
+ endpoint: NexraModelEndpointSpec & {
27
+ protocol: NexraLanguageProtocol;
28
+ };
29
+ supportsStreaming: boolean;
30
+ maxOutputTokens?: number;
31
+ }>;
32
+ declare function getLanguageModelBinding(modelId: string, options?: {
33
+ protocol?: NexraLanguageProtocol;
34
+ }): NexraLanguageModelBinding;
35
+ type NexraLanguageReasoning = Readonly<{
36
+ providerOptions: Record<string, JsonObject>;
37
+ canDisable: boolean;
38
+ }>;
39
+ declare function resolveNexraLanguageReasoning(modelId: string, options: {
40
+ enabled: boolean;
41
+ protocol?: NexraLanguageProtocol;
42
+ }): NexraLanguageReasoning;
43
+
44
+ export { CatalogClient, CreateNexraDisplayQuoteBatchRequest, CreateNexraQuoteRequest, NexraCatalogChangePage, NexraCatalogChangeParams, NexraCatalogModelState, NexraCatalogRevision, NexraDisplayQuoteBatch, type NexraLanguageModelBinding, type NexraLanguageProtocol, type NexraLanguageReasoning, NexraModelEndpointSpec, NexraModelSpec, NexraModelSpecFilter, NexraQuote, NexraSalePriceList, formatModelDisplayName, getLanguageModelBinding, getModelSpec, listModelSpecs, resolveNexraLanguageReasoning };
package/dist/catalog.js CHANGED
@@ -1,10 +1,25 @@
1
1
  import {
2
2
  CatalogClient,
3
+ applyMediaGeometry,
4
+ decodeMediaGeometry,
5
+ encodeMediaGeometry,
6
+ formatModelDisplayName,
7
+ getLanguageModelBinding,
3
8
  getModelSpec,
4
- listModelSpecs
5
- } from "./chunk-IMJZBLDE.js";
9
+ listModelSpecs,
10
+ projectMediaGeometry,
11
+ resolveNexraLanguageReasoning
12
+ } from "./chunk-QXEDXMFI.js";
13
+ import "./chunk-QBW7OCT3.js";
6
14
  export {
7
15
  CatalogClient,
16
+ applyMediaGeometry,
17
+ decodeMediaGeometry,
18
+ encodeMediaGeometry,
19
+ formatModelDisplayName,
20
+ getLanguageModelBinding,
8
21
  getModelSpec,
9
- listModelSpecs
22
+ listModelSpecs,
23
+ projectMediaGeometry,
24
+ resolveNexraLanguageReasoning
10
25
  };