@gullabs/xai 0.5.0 → 0.6.0

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/dist/index.d.ts CHANGED
@@ -12,9 +12,29 @@ import { z } from 'zod';
12
12
  *
13
13
  * @module
14
14
  */
15
+ type XaiWebSearchTool = {
16
+ type: 'web_search';
17
+ allowedDomains?: string[];
18
+ excludedDomains?: string[];
19
+ enableImageUnderstanding?: boolean;
20
+ enableImageSearch?: boolean;
21
+ };
22
+ type XaiXSearchTool = {
23
+ type: 'x_search';
24
+ allowedXHandles?: string[];
25
+ excludedXHandles?: string[];
26
+ fromDate?: string;
27
+ toDate?: string;
28
+ enableImageUnderstanding?: boolean;
29
+ enableVideoUnderstanding?: boolean;
30
+ };
15
31
  type XaiProviderOptions = {
16
32
  /** xAI conversation-routing cache key — maps to Responses API `prompt_cache_key`. */
17
33
  promptCacheKey?: string;
34
+ /** Server-side Live Search tools (`web_search`, `x_search`). */
35
+ tools?: Array<XaiWebSearchTool | XaiXSearchTool>;
36
+ /** xAI-only; Gemini has no parallel-tool knob. */
37
+ parallelToolCalls?: boolean;
18
38
  };
19
39
  declare module '@gullabs/core' {
20
40
  interface ProviderOptionsMap {
@@ -73,6 +93,20 @@ interface XaiInputItem {
73
93
  role: 'user' | 'assistant' | 'system' | 'developer';
74
94
  content: XaiInputContentPart[];
75
95
  }
96
+ /** Live-verified store:false replay item. */
97
+ interface XaiFunctionCallInputItem {
98
+ type: 'function_call';
99
+ call_id: string;
100
+ name: string;
101
+ arguments: string;
102
+ }
103
+ /** Live-verified store:false replay item. */
104
+ interface XaiFunctionCallOutputInputItem {
105
+ type: 'function_call_output';
106
+ call_id: string;
107
+ output: string;
108
+ }
109
+ type XaiRequestInputItem = XaiInputItem | XaiFunctionCallInputItem | XaiFunctionCallOutputInputItem;
76
110
  /**
77
111
  * Structured-output text-format request shape.
78
112
  * Real xAI field: `text.format`, NOT `response_format`.
@@ -96,7 +130,7 @@ type XaiTextFormat = {
96
130
  */
97
131
  interface XaiResponseCreateParams {
98
132
  model: string;
99
- input: XaiInputItem[];
133
+ input: XaiRequestInputItem[];
100
134
  instructions?: string;
101
135
  reasoning?: {
102
136
  effort: 'low' | 'medium' | 'high' | 'xhigh';
@@ -115,6 +149,17 @@ interface XaiResponseCreateParams {
115
149
  service_tier?: 'priority';
116
150
  /** Always `false` — this library never relies on xAI-side conversation storage. */
117
151
  store: false;
152
+ /**
153
+ * Server-side and/or function tools. Wire names are snake_case.
154
+ * Shape is pinned from live 2026-08-24 fixtures.
155
+ */
156
+ tools?: Array<Record<string, unknown>>;
157
+ /** `'auto' | 'required' | 'none'` or live-verified `{ type: 'function', name }`. */
158
+ tool_choice?: string | {
159
+ type: 'function';
160
+ name: string;
161
+ };
162
+ parallel_tool_calls?: boolean;
118
163
  }
119
164
  /** A single summary-text segment of a `type: 'reasoning'` output item. */
120
165
  interface XaiReasoningSummaryPart {
@@ -143,8 +188,13 @@ interface XaiMessageOutputItem {
143
188
  status?: string;
144
189
  content: XaiOutputTextPart[];
145
190
  }
191
+ /** Server-tool or function-call output items we do not collapse as messages. */
192
+ interface XaiOtherOutputItem {
193
+ type: string;
194
+ [key: string]: unknown;
195
+ }
146
196
  /** Union of output-item shapes the Responses API may return. */
147
- type XaiOutputItem = XaiReasoningOutputItem | XaiMessageOutputItem;
197
+ type XaiOutputItem = XaiReasoningOutputItem | XaiMessageOutputItem | XaiOtherOutputItem;
148
198
  /**
149
199
  * Token usage metadata returned alongside an xAI response.
150
200
  *
@@ -200,6 +250,12 @@ interface XaiResponseShape {
200
250
  metadata?: {
201
251
  [key: string]: unknown;
202
252
  } | null;
253
+ /**
254
+ * Top-level citations array. Live 2026-08-24 search-tools probes returned
255
+ * `null`; citations arrived as `output_text.annotations` of type
256
+ * `url_citation` instead.
257
+ */
258
+ citations?: unknown;
203
259
  }
204
260
  /**
205
261
  * Structural interface for the `openai` SDK's `client.responses` surface
@@ -240,28 +296,23 @@ declare function buildXaiClient(auth: AuthMaterial): Promise<XaiClientLike>;
240
296
  * Classify a raw error thrown from the xAI Responses API call into a typed
241
297
  * {@link LlmError}.
242
298
  *
243
- * xAI's Responses API returns HTTP 400 (NOT 401) for an invalid API key, so
244
- * generic {@link classifyHttpStatus}-based classification (which maps 400 →
245
- * `bad_request`) is wrong for this one case. This function special-cases it:
246
- * a 400 response whose STRUCTURED parsed body matches the exact recorded
247
- * xAI auth-failure signature (`code: 'invalid-argument'` AND message prefix
248
- * `"Incorrect API key provided"` — see fixture 09) is reclassified as
249
- * `invalid_auth`. Free-form `Error.message` text is never scanned, so a 400
250
- * whose message merely *mentions* an API key (e.g. schema validation echoing
251
- * user content) stays `bad_request`. When the structured body is unavailable
252
- * or unparseable, classification falls through to the status-based
253
- * `classifyError` from `@gullabs/core`.
254
- *
255
- * A second special case widens `classifyError`'s generic fallback: when the
256
- * base classification lands on `kind: 'unknown'` (no HTTP status to route
257
- * by) AND the raw error matches a known transport-failure signature (see
258
- * {@link isXaiTransportError}), it is reclassified `kind: 'server',
259
- * retryable: true` — the same "provider fault, not caller fault, safe to
260
- * retry" bucket this adapter's `countTokens` path already uses for
261
- * provider-side failures with no HTTP status. A connection that never
262
- * reached xAI is not the caller's fault and is safe to retry; it must never
263
- * be surfaced as the non-retryable `unknown` kind, which Temporal treats as
264
- * fatal and uses to kill the run outright.
299
+ * HTTP status is a hint, not a kind. Overlays inspect the STRUCTURED parsed
300
+ * body only — never free-form `Error.message` — so echoed user content cannot
301
+ * change classification.
302
+ *
303
+ * 1. Already an {@link LlmError} → returned unchanged (including an untagged
304
+ * one).
305
+ * 2. HTTP 400 whose structured body starts with
306
+ * `"Incorrect API key provided"` (fixture 09; prefix only — the SDK may
307
+ * drop `code`) → `invalid_auth`.
308
+ * 3. HTTP 403 whose structured body starts with
309
+ * `"Content violates usage guidelines"` (fixture 15; `SAFETY_CHECK_TYPE_*`
310
+ * suffixes vary) → `content_filter`. A bare 403 without that body stays
311
+ * the core default, `invalid_auth`.
312
+ * 4. `kind: 'unknown'` with a known transport-failure signature (see
313
+ * {@link isXaiTransportError}) → `server`, retryable. A connection that
314
+ * never reached xAI is not the caller's fault.
315
+ * 5. Else rebuild the core classification tagged `provider: 'xai'`.
265
316
  */
266
317
  declare function classifyXaiError(rawErr: unknown): LlmError;
267
318
  interface XaiAdapterOptions {
@@ -280,6 +331,12 @@ interface XaiAdapterOptions {
280
331
  * Never set this in production code. Mirrors `GeminiAdapterOptions._clientFactory`.
281
332
  */
282
333
  _clientFactory?: (auth: AuthMaterial) => XaiClientLike | Promise<XaiClientLike>;
334
+ /**
335
+ * @internal Testing-only.
336
+ *
337
+ * Override `fetch` for `POST /v1/tokenize-text` (not on the openai SDK).
338
+ */
339
+ _fetch?: typeof fetch;
283
340
  }
284
341
  /**
285
342
  * Create an xAI Grok provider adapter (Responses API).
@@ -433,7 +490,8 @@ declare class XaiFileStore {
433
490
  * Mirrors `@gullabs/core`'s `packages/core/src/model-config/*.ts` doc-density
434
491
  * style, but is a single self-contained `z.strictObject` — unlike Gemini's
435
492
  * schemas, xai has no service-tier branching (no `z.union` of tier variants
436
- * needed), no `topK`, and only a single reasoning-effort union (`'low'|'high'`).
493
+ * needed), no `topK`, and a reasoning-effort union of `'low'|'medium'|'high'`
494
+ * (live-verified 2026-08-24).
437
495
  *
438
496
  * @module
439
497
  */
@@ -445,6 +503,7 @@ declare const Grok45ConfigSchema: z.ZodObject<{
445
503
  reasoning: z.ZodOptional<z.ZodObject<{
446
504
  effort: z.ZodEnum<{
447
505
  low: "low";
506
+ medium: "medium";
448
507
  high: "high";
449
508
  }>;
450
509
  }, z.core.$strict>>;
@@ -452,6 +511,110 @@ declare const Grok45ConfigSchema: z.ZodObject<{
452
511
  providerOptions: z.ZodOptional<z.ZodObject<{
453
512
  xai: z.ZodOptional<z.ZodObject<{
454
513
  promptCacheKey: z.ZodOptional<z.ZodString>;
514
+ tools: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
515
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
516
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
517
+ type: z.ZodLiteral<"web_search">;
518
+ allowedDomains: z.ZodArray<z.ZodString>;
519
+ }, z.core.$strict>, z.ZodObject<{
520
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
521
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
522
+ type: z.ZodLiteral<"web_search">;
523
+ excludedDomains: z.ZodArray<z.ZodString>;
524
+ }, z.core.$strict>, z.ZodObject<{
525
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
526
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
527
+ type: z.ZodLiteral<"web_search">;
528
+ }, z.core.$strict>]>], null>, z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
529
+ fromDate: z.ZodOptional<z.ZodISODate>;
530
+ toDate: z.ZodOptional<z.ZodISODate>;
531
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
532
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
533
+ type: z.ZodLiteral<"x_search">;
534
+ allowedXHandles: z.ZodArray<z.ZodString>;
535
+ }, z.core.$strict>, z.ZodObject<{
536
+ fromDate: z.ZodOptional<z.ZodISODate>;
537
+ toDate: z.ZodOptional<z.ZodISODate>;
538
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
539
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
540
+ type: z.ZodLiteral<"x_search">;
541
+ excludedXHandles: z.ZodArray<z.ZodString>;
542
+ }, z.core.$strict>, z.ZodObject<{
543
+ fromDate: z.ZodOptional<z.ZodISODate>;
544
+ toDate: z.ZodOptional<z.ZodISODate>;
545
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
546
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
547
+ type: z.ZodLiteral<"x_search">;
548
+ }, z.core.$strict>]>], null>, z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
549
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
550
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
551
+ type: z.ZodLiteral<"web_search">;
552
+ allowedDomains: z.ZodArray<z.ZodString>;
553
+ }, z.core.$strict>, z.ZodObject<{
554
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
555
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
556
+ type: z.ZodLiteral<"web_search">;
557
+ excludedDomains: z.ZodArray<z.ZodString>;
558
+ }, z.core.$strict>, z.ZodObject<{
559
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
560
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
561
+ type: z.ZodLiteral<"web_search">;
562
+ }, z.core.$strict>]>, z.ZodUnion<readonly [z.ZodObject<{
563
+ fromDate: z.ZodOptional<z.ZodISODate>;
564
+ toDate: z.ZodOptional<z.ZodISODate>;
565
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
566
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
567
+ type: z.ZodLiteral<"x_search">;
568
+ allowedXHandles: z.ZodArray<z.ZodString>;
569
+ }, z.core.$strict>, z.ZodObject<{
570
+ fromDate: z.ZodOptional<z.ZodISODate>;
571
+ toDate: z.ZodOptional<z.ZodISODate>;
572
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
573
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
574
+ type: z.ZodLiteral<"x_search">;
575
+ excludedXHandles: z.ZodArray<z.ZodString>;
576
+ }, z.core.$strict>, z.ZodObject<{
577
+ fromDate: z.ZodOptional<z.ZodISODate>;
578
+ toDate: z.ZodOptional<z.ZodISODate>;
579
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
580
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
581
+ type: z.ZodLiteral<"x_search">;
582
+ }, z.core.$strict>]>], null>, z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
583
+ fromDate: z.ZodOptional<z.ZodISODate>;
584
+ toDate: z.ZodOptional<z.ZodISODate>;
585
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
586
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
587
+ type: z.ZodLiteral<"x_search">;
588
+ allowedXHandles: z.ZodArray<z.ZodString>;
589
+ }, z.core.$strict>, z.ZodObject<{
590
+ fromDate: z.ZodOptional<z.ZodISODate>;
591
+ toDate: z.ZodOptional<z.ZodISODate>;
592
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
593
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
594
+ type: z.ZodLiteral<"x_search">;
595
+ excludedXHandles: z.ZodArray<z.ZodString>;
596
+ }, z.core.$strict>, z.ZodObject<{
597
+ fromDate: z.ZodOptional<z.ZodISODate>;
598
+ toDate: z.ZodOptional<z.ZodISODate>;
599
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
600
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
601
+ type: z.ZodLiteral<"x_search">;
602
+ }, z.core.$strict>]>, z.ZodUnion<readonly [z.ZodObject<{
603
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
604
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
605
+ type: z.ZodLiteral<"web_search">;
606
+ allowedDomains: z.ZodArray<z.ZodString>;
607
+ }, z.core.$strict>, z.ZodObject<{
608
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
609
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
610
+ type: z.ZodLiteral<"web_search">;
611
+ excludedDomains: z.ZodArray<z.ZodString>;
612
+ }, z.core.$strict>, z.ZodObject<{
613
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
614
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
615
+ type: z.ZodLiteral<"web_search">;
616
+ }, z.core.$strict>]>], null>]>>;
617
+ parallelToolCalls: z.ZodOptional<z.ZodBoolean>;
455
618
  }, z.core.$strict>>;
456
619
  }, z.core.$strict>>;
457
620
  }, z.core.$strict>;
@@ -485,6 +648,110 @@ declare const Grok46ConfigSchema: z.ZodObject<{
485
648
  providerOptions: z.ZodOptional<z.ZodObject<{
486
649
  xai: z.ZodOptional<z.ZodObject<{
487
650
  promptCacheKey: z.ZodOptional<z.ZodString>;
651
+ tools: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
652
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
653
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
654
+ type: z.ZodLiteral<"web_search">;
655
+ allowedDomains: z.ZodArray<z.ZodString>;
656
+ }, z.core.$strict>, z.ZodObject<{
657
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
658
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
659
+ type: z.ZodLiteral<"web_search">;
660
+ excludedDomains: z.ZodArray<z.ZodString>;
661
+ }, z.core.$strict>, z.ZodObject<{
662
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
663
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
664
+ type: z.ZodLiteral<"web_search">;
665
+ }, z.core.$strict>]>], null>, z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
666
+ fromDate: z.ZodOptional<z.ZodISODate>;
667
+ toDate: z.ZodOptional<z.ZodISODate>;
668
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
669
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
670
+ type: z.ZodLiteral<"x_search">;
671
+ allowedXHandles: z.ZodArray<z.ZodString>;
672
+ }, z.core.$strict>, z.ZodObject<{
673
+ fromDate: z.ZodOptional<z.ZodISODate>;
674
+ toDate: z.ZodOptional<z.ZodISODate>;
675
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
676
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
677
+ type: z.ZodLiteral<"x_search">;
678
+ excludedXHandles: z.ZodArray<z.ZodString>;
679
+ }, z.core.$strict>, z.ZodObject<{
680
+ fromDate: z.ZodOptional<z.ZodISODate>;
681
+ toDate: z.ZodOptional<z.ZodISODate>;
682
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
683
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
684
+ type: z.ZodLiteral<"x_search">;
685
+ }, z.core.$strict>]>], null>, z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
686
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
687
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
688
+ type: z.ZodLiteral<"web_search">;
689
+ allowedDomains: z.ZodArray<z.ZodString>;
690
+ }, z.core.$strict>, z.ZodObject<{
691
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
692
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
693
+ type: z.ZodLiteral<"web_search">;
694
+ excludedDomains: z.ZodArray<z.ZodString>;
695
+ }, z.core.$strict>, z.ZodObject<{
696
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
697
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
698
+ type: z.ZodLiteral<"web_search">;
699
+ }, z.core.$strict>]>, z.ZodUnion<readonly [z.ZodObject<{
700
+ fromDate: z.ZodOptional<z.ZodISODate>;
701
+ toDate: z.ZodOptional<z.ZodISODate>;
702
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
703
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
704
+ type: z.ZodLiteral<"x_search">;
705
+ allowedXHandles: z.ZodArray<z.ZodString>;
706
+ }, z.core.$strict>, z.ZodObject<{
707
+ fromDate: z.ZodOptional<z.ZodISODate>;
708
+ toDate: z.ZodOptional<z.ZodISODate>;
709
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
710
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
711
+ type: z.ZodLiteral<"x_search">;
712
+ excludedXHandles: z.ZodArray<z.ZodString>;
713
+ }, z.core.$strict>, z.ZodObject<{
714
+ fromDate: z.ZodOptional<z.ZodISODate>;
715
+ toDate: z.ZodOptional<z.ZodISODate>;
716
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
717
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
718
+ type: z.ZodLiteral<"x_search">;
719
+ }, z.core.$strict>]>], null>, z.ZodTuple<[z.ZodUnion<readonly [z.ZodObject<{
720
+ fromDate: z.ZodOptional<z.ZodISODate>;
721
+ toDate: z.ZodOptional<z.ZodISODate>;
722
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
723
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
724
+ type: z.ZodLiteral<"x_search">;
725
+ allowedXHandles: z.ZodArray<z.ZodString>;
726
+ }, z.core.$strict>, z.ZodObject<{
727
+ fromDate: z.ZodOptional<z.ZodISODate>;
728
+ toDate: z.ZodOptional<z.ZodISODate>;
729
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
730
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
731
+ type: z.ZodLiteral<"x_search">;
732
+ excludedXHandles: z.ZodArray<z.ZodString>;
733
+ }, z.core.$strict>, z.ZodObject<{
734
+ fromDate: z.ZodOptional<z.ZodISODate>;
735
+ toDate: z.ZodOptional<z.ZodISODate>;
736
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
737
+ enableVideoUnderstanding: z.ZodOptional<z.ZodBoolean>;
738
+ type: z.ZodLiteral<"x_search">;
739
+ }, z.core.$strict>]>, z.ZodUnion<readonly [z.ZodObject<{
740
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
741
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
742
+ type: z.ZodLiteral<"web_search">;
743
+ allowedDomains: z.ZodArray<z.ZodString>;
744
+ }, z.core.$strict>, z.ZodObject<{
745
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
746
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
747
+ type: z.ZodLiteral<"web_search">;
748
+ excludedDomains: z.ZodArray<z.ZodString>;
749
+ }, z.core.$strict>, z.ZodObject<{
750
+ enableImageUnderstanding: z.ZodOptional<z.ZodBoolean>;
751
+ enableImageSearch: z.ZodOptional<z.ZodBoolean>;
752
+ type: z.ZodLiteral<"web_search">;
753
+ }, z.core.$strict>]>], null>]>>;
754
+ parallelToolCalls: z.ZodOptional<z.ZodBoolean>;
488
755
  }, z.core.$strict>>;
489
756
  }, z.core.$strict>>;
490
757
  }, z.core.$strict>;
@@ -544,7 +811,16 @@ declare const xaiRegistry: ModelRegistry;
544
811
  */
545
812
 
546
813
  /** Identifies this pricing snapshot — bump the date when rates change. */
547
- declare const xaiPricingVersion: "xai-2026-08-12";
814
+ declare const xaiPricingVersion: "xai-2026-08-24";
815
+ /**
816
+ * Live-pinned 2026-08-24 per-invocation tool rates (µUSD per call).
817
+ * Source: `usage.server_side_tool_usage_details` on /v1/responses.
818
+ * $5 / 1,000 web or X searches; $10 / 1,000 attachment/document searches.
819
+ */
820
+ declare const XAI_TOOL_RATE_MICRO_USD: {
821
+ readonly web_search_calls: 5000;
822
+ readonly x_search_calls: 5000;
823
+ };
548
824
  /**
549
825
  * Per-model rate entry (all values in µUSD per million tokens).
550
826
  *
@@ -597,8 +873,13 @@ declare const XAI_PRICING: Readonly<Record<string, XaiModelRates>>;
597
873
  * 4. Billable input = `inputTokens − (cachedInputTokens ?? 0)`, clamped to 0.
598
874
  * 5. Round each component (input, cached, output) independently to the
599
875
  * nearest integer micro-USD.
600
- * 6. `microUsd` is the sum of the three components — guarantees
601
- * `details.input + details.cached + details.output === microUsd` exactly.
876
+ * 6. `microUsd` is the sum of the four components — guarantees
877
+ * `details.input + details.cached + details.output + details.tools === microUsd`.
878
+ * 7. Tool lanes: live-pinned counters `web_search_calls`, `x_search_calls`,
879
+ * `document_search_calls`. If `usage.details.server_tools_requested === 1`
880
+ * and those counters are absent, token lanes are priced, `tools: 0`,
881
+ * `confidence: 'estimated'`. `'exact'` requires counters present or no
882
+ * server tools requested.
602
883
  */
603
884
  declare function computeXaiCost(model: string, usage: Usage, tier?: string): Cost;
604
885
  /**
@@ -644,4 +925,4 @@ declare function xaiPricingSource(): PricingSource;
644
925
  */
645
926
  declare function xaiProvider(opts?: XaiAdapterOptions): ProviderPlugin;
646
927
 
647
- export { type FileDeleteOptions, Grok45ConfigSchema, Grok46ConfigSchema, XAI_FILES_DEFAULT_BASE_URL, XAI_FILE_MAX_BYTES, XAI_FILE_TTL_MAX_SECONDS, XAI_FILE_TTL_MIN_SECONDS, XAI_PRICING, type XaiAdapterOptions, type XaiClientLike, type XaiFileHandle, type XaiFileListOptions, type XaiFileListResult, XaiFileStore, type XaiFileStoreOptions, type XaiFileUploadInput, type XaiInputContentPart, type XaiInputFilePart, type XaiInputImagePart, type XaiInputItem, type XaiInputTextPart, type XaiMessageOutputItem, type XaiModelRates, type XaiOutputItem, type XaiOutputTextPart, type XaiProviderOptions, type XaiReasoningOutputItem, type XaiReasoningSummaryPart, type XaiResponseCreateParams, type XaiResponseShape, type XaiTextFormat, type XaiUsageShape, buildXaiClient, classifyXaiError, computeXaiCost, grok45ModelDescriptor, grok46ModelDescriptor, requireApiKey, xaiAdapter, xaiModelDescriptors, xaiPricingSource, xaiPricingVersion, xaiProvider, xaiRegistry };
928
+ export { type FileDeleteOptions, Grok45ConfigSchema, Grok46ConfigSchema, XAI_FILES_DEFAULT_BASE_URL, XAI_FILE_MAX_BYTES, XAI_FILE_TTL_MAX_SECONDS, XAI_FILE_TTL_MIN_SECONDS, XAI_PRICING, XAI_TOOL_RATE_MICRO_USD, type XaiAdapterOptions, type XaiClientLike, type XaiFileHandle, type XaiFileListOptions, type XaiFileListResult, XaiFileStore, type XaiFileStoreOptions, type XaiFileUploadInput, type XaiInputContentPart, type XaiInputFilePart, type XaiInputImagePart, type XaiInputItem, type XaiInputTextPart, type XaiMessageOutputItem, type XaiModelRates, type XaiOutputItem, type XaiOutputTextPart, type XaiProviderOptions, type XaiReasoningOutputItem, type XaiReasoningSummaryPart, type XaiResponseCreateParams, type XaiResponseShape, type XaiTextFormat, type XaiUsageShape, type XaiWebSearchTool, type XaiXSearchTool, buildXaiClient, classifyXaiError, computeXaiCost, grok45ModelDescriptor, grok46ModelDescriptor, requireApiKey, xaiAdapter, xaiModelDescriptors, xaiPricingSource, xaiPricingVersion, xaiProvider, xaiRegistry };