ai.matey.backend 0.2.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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/index.js +60 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/providers/ai21.js +331 -0
  5. package/dist/cjs/providers/ai21.js.map +1 -0
  6. package/dist/cjs/providers/anthropic.js +664 -0
  7. package/dist/cjs/providers/anthropic.js.map +1 -0
  8. package/dist/cjs/providers/anyscale.js +338 -0
  9. package/dist/cjs/providers/anyscale.js.map +1 -0
  10. package/dist/cjs/providers/aws-bedrock.js +374 -0
  11. package/dist/cjs/providers/aws-bedrock.js.map +1 -0
  12. package/dist/cjs/providers/azure-openai.js +406 -0
  13. package/dist/cjs/providers/azure-openai.js.map +1 -0
  14. package/dist/cjs/providers/cerebras.js +356 -0
  15. package/dist/cjs/providers/cerebras.js.map +1 -0
  16. package/dist/cjs/providers/cloudflare.js +359 -0
  17. package/dist/cjs/providers/cloudflare.js.map +1 -0
  18. package/dist/cjs/providers/cohere.js +368 -0
  19. package/dist/cjs/providers/cohere.js.map +1 -0
  20. package/dist/cjs/providers/deepinfra.js +343 -0
  21. package/dist/cjs/providers/deepinfra.js.map +1 -0
  22. package/dist/cjs/providers/deepseek.js +104 -0
  23. package/dist/cjs/providers/deepseek.js.map +1 -0
  24. package/dist/cjs/providers/fireworks.js +363 -0
  25. package/dist/cjs/providers/fireworks.js.map +1 -0
  26. package/dist/cjs/providers/gemini.js +292 -0
  27. package/dist/cjs/providers/gemini.js.map +1 -0
  28. package/dist/cjs/providers/groq.js +143 -0
  29. package/dist/cjs/providers/groq.js.map +1 -0
  30. package/dist/cjs/providers/huggingface.js +392 -0
  31. package/dist/cjs/providers/huggingface.js.map +1 -0
  32. package/dist/cjs/providers/lmstudio.js +144 -0
  33. package/dist/cjs/providers/lmstudio.js.map +1 -0
  34. package/dist/cjs/providers/mistral.js +288 -0
  35. package/dist/cjs/providers/mistral.js.map +1 -0
  36. package/dist/cjs/providers/nvidia.js +167 -0
  37. package/dist/cjs/providers/nvidia.js.map +1 -0
  38. package/dist/cjs/providers/ollama.js +257 -0
  39. package/dist/cjs/providers/ollama.js.map +1 -0
  40. package/dist/cjs/providers/openai.js +640 -0
  41. package/dist/cjs/providers/openai.js.map +1 -0
  42. package/dist/cjs/providers/openrouter.js +379 -0
  43. package/dist/cjs/providers/openrouter.js.map +1 -0
  44. package/dist/cjs/providers/perplexity.js +372 -0
  45. package/dist/cjs/providers/perplexity.js.map +1 -0
  46. package/dist/cjs/providers/replicate.js +340 -0
  47. package/dist/cjs/providers/replicate.js.map +1 -0
  48. package/dist/cjs/providers/together-ai.js +341 -0
  49. package/dist/cjs/providers/together-ai.js.map +1 -0
  50. package/dist/cjs/providers/xai.js +339 -0
  51. package/dist/cjs/providers/xai.js.map +1 -0
  52. package/dist/cjs/shared.js +279 -0
  53. package/dist/cjs/shared.js.map +1 -0
  54. package/dist/esm/index.js +44 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/providers/ai21.js +327 -0
  57. package/dist/esm/providers/ai21.js.map +1 -0
  58. package/dist/esm/providers/anthropic.js +660 -0
  59. package/dist/esm/providers/anthropic.js.map +1 -0
  60. package/dist/esm/providers/anyscale.js +334 -0
  61. package/dist/esm/providers/anyscale.js.map +1 -0
  62. package/dist/esm/providers/aws-bedrock.js +370 -0
  63. package/dist/esm/providers/aws-bedrock.js.map +1 -0
  64. package/dist/esm/providers/azure-openai.js +402 -0
  65. package/dist/esm/providers/azure-openai.js.map +1 -0
  66. package/dist/esm/providers/cerebras.js +352 -0
  67. package/dist/esm/providers/cerebras.js.map +1 -0
  68. package/dist/esm/providers/cloudflare.js +355 -0
  69. package/dist/esm/providers/cloudflare.js.map +1 -0
  70. package/dist/esm/providers/cohere.js +364 -0
  71. package/dist/esm/providers/cohere.js.map +1 -0
  72. package/dist/esm/providers/deepinfra.js +339 -0
  73. package/dist/esm/providers/deepinfra.js.map +1 -0
  74. package/dist/esm/providers/deepseek.js +99 -0
  75. package/dist/esm/providers/deepseek.js.map +1 -0
  76. package/dist/esm/providers/fireworks.js +359 -0
  77. package/dist/esm/providers/fireworks.js.map +1 -0
  78. package/dist/esm/providers/gemini.js +288 -0
  79. package/dist/esm/providers/gemini.js.map +1 -0
  80. package/dist/esm/providers/groq.js +138 -0
  81. package/dist/esm/providers/groq.js.map +1 -0
  82. package/dist/esm/providers/huggingface.js +387 -0
  83. package/dist/esm/providers/huggingface.js.map +1 -0
  84. package/dist/esm/providers/lmstudio.js +139 -0
  85. package/dist/esm/providers/lmstudio.js.map +1 -0
  86. package/dist/esm/providers/mistral.js +284 -0
  87. package/dist/esm/providers/mistral.js.map +1 -0
  88. package/dist/esm/providers/nvidia.js +162 -0
  89. package/dist/esm/providers/nvidia.js.map +1 -0
  90. package/dist/esm/providers/ollama.js +253 -0
  91. package/dist/esm/providers/ollama.js.map +1 -0
  92. package/dist/esm/providers/openai.js +636 -0
  93. package/dist/esm/providers/openai.js.map +1 -0
  94. package/dist/esm/providers/openrouter.js +375 -0
  95. package/dist/esm/providers/openrouter.js.map +1 -0
  96. package/dist/esm/providers/perplexity.js +368 -0
  97. package/dist/esm/providers/perplexity.js.map +1 -0
  98. package/dist/esm/providers/replicate.js +336 -0
  99. package/dist/esm/providers/replicate.js.map +1 -0
  100. package/dist/esm/providers/together-ai.js +337 -0
  101. package/dist/esm/providers/together-ai.js.map +1 -0
  102. package/dist/esm/providers/xai.js +335 -0
  103. package/dist/esm/providers/xai.js.map +1 -0
  104. package/dist/esm/shared.js +272 -0
  105. package/dist/esm/shared.js.map +1 -0
  106. package/dist/types/index.d.ts +38 -0
  107. package/dist/types/index.d.ts.map +1 -0
  108. package/dist/types/providers/ai21.d.ts +106 -0
  109. package/dist/types/providers/ai21.d.ts.map +1 -0
  110. package/dist/types/providers/anthropic.d.ts +194 -0
  111. package/dist/types/providers/anthropic.d.ts.map +1 -0
  112. package/dist/types/providers/anyscale.d.ts +109 -0
  113. package/dist/types/providers/anyscale.d.ts.map +1 -0
  114. package/dist/types/providers/aws-bedrock.d.ts +152 -0
  115. package/dist/types/providers/aws-bedrock.d.ts.map +1 -0
  116. package/dist/types/providers/azure-openai.d.ts +142 -0
  117. package/dist/types/providers/azure-openai.d.ts.map +1 -0
  118. package/dist/types/providers/cerebras.d.ts +130 -0
  119. package/dist/types/providers/cerebras.d.ts.map +1 -0
  120. package/dist/types/providers/cloudflare.d.ts +125 -0
  121. package/dist/types/providers/cloudflare.d.ts.map +1 -0
  122. package/dist/types/providers/cohere.d.ts +114 -0
  123. package/dist/types/providers/cohere.d.ts.map +1 -0
  124. package/dist/types/providers/deepinfra.d.ts +118 -0
  125. package/dist/types/providers/deepinfra.d.ts.map +1 -0
  126. package/dist/types/providers/deepseek.d.ts +68 -0
  127. package/dist/types/providers/deepseek.d.ts.map +1 -0
  128. package/dist/types/providers/fireworks.d.ts +127 -0
  129. package/dist/types/providers/fireworks.d.ts.map +1 -0
  130. package/dist/types/providers/gemini.d.ts +71 -0
  131. package/dist/types/providers/gemini.d.ts.map +1 -0
  132. package/dist/types/providers/groq.d.ts +83 -0
  133. package/dist/types/providers/groq.d.ts.map +1 -0
  134. package/dist/types/providers/huggingface.d.ts +154 -0
  135. package/dist/types/providers/huggingface.d.ts.map +1 -0
  136. package/dist/types/providers/lmstudio.d.ts +88 -0
  137. package/dist/types/providers/lmstudio.d.ts.map +1 -0
  138. package/dist/types/providers/mistral.d.ts +65 -0
  139. package/dist/types/providers/mistral.d.ts.map +1 -0
  140. package/dist/types/providers/nvidia.d.ts +100 -0
  141. package/dist/types/providers/nvidia.d.ts.map +1 -0
  142. package/dist/types/providers/ollama.d.ts +59 -0
  143. package/dist/types/providers/ollama.d.ts.map +1 -0
  144. package/dist/types/providers/openai.d.ts +205 -0
  145. package/dist/types/providers/openai.d.ts.map +1 -0
  146. package/dist/types/providers/openrouter.d.ts +135 -0
  147. package/dist/types/providers/openrouter.d.ts.map +1 -0
  148. package/dist/types/providers/perplexity.d.ts +116 -0
  149. package/dist/types/providers/perplexity.d.ts.map +1 -0
  150. package/dist/types/providers/replicate.d.ts +91 -0
  151. package/dist/types/providers/replicate.d.ts.map +1 -0
  152. package/dist/types/providers/together-ai.d.ts +118 -0
  153. package/dist/types/providers/together-ai.d.ts.map +1 -0
  154. package/dist/types/providers/xai.d.ts +119 -0
  155. package/dist/types/providers/xai.d.ts.map +1 -0
  156. package/dist/types/shared.d.ts +116 -0
  157. package/dist/types/shared.d.ts.map +1 -0
  158. package/package.json +327 -0
  159. package/readme.md +86 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Replicate Backend Adapter
3
+ *
4
+ * Adapts Universal IR to Replicate Predictions API.
5
+ * Replicate has per-model API variations and async prediction workflow.
6
+ *
7
+ * @module
8
+ */
9
+ import type { BackendAdapter, BackendAdapterConfig, AdapterMetadata } from 'ai.matey.types';
10
+ import type { IRChatRequest, IRChatResponse, IRChatStream } from 'ai.matey.types';
11
+ export interface ReplicateInput {
12
+ prompt?: string;
13
+ system_prompt?: string;
14
+ temperature?: number;
15
+ max_tokens?: number;
16
+ top_p?: number;
17
+ top_k?: number;
18
+ }
19
+ export interface ReplicatePrediction {
20
+ id: string;
21
+ status: 'starting' | 'processing' | 'succeeded' | 'failed' | 'canceled';
22
+ input: ReplicateInput;
23
+ output?: string | string[];
24
+ error?: string;
25
+ metrics?: {
26
+ predict_time?: number;
27
+ };
28
+ urls?: {
29
+ get: string;
30
+ cancel: string;
31
+ };
32
+ }
33
+ export interface ReplicateRequest {
34
+ version: string;
35
+ input: ReplicateInput;
36
+ stream?: boolean;
37
+ }
38
+ /**
39
+ * Backend adapter for Replicate Predictions API.
40
+ *
41
+ * Features:
42
+ * - Async prediction workflow
43
+ * - Per-model API variations
44
+ * - Limited streaming support
45
+ * - Text-only (vision varies by model)
46
+ * - No function calling
47
+ * - Variable pricing per model
48
+ *
49
+ * Note: This adapter uses a simplified synchronous approach by polling.
50
+ * For production, consider using webhooks or proper async patterns.
51
+ */
52
+ export declare class ReplicateBackendAdapter implements BackendAdapter<ReplicateRequest, ReplicatePrediction> {
53
+ readonly metadata: AdapterMetadata;
54
+ private readonly config;
55
+ private readonly baseURL;
56
+ private readonly maxPollAttempts;
57
+ private readonly pollInterval;
58
+ constructor(config: BackendAdapterConfig);
59
+ /**
60
+ * Convert IR to Replicate format.
61
+ */
62
+ fromIR(request: IRChatRequest): ReplicateRequest;
63
+ /**
64
+ * Convert Replicate prediction to IR.
65
+ */
66
+ toIR(prediction: ReplicatePrediction, originalRequest: IRChatRequest, latencyMs: number): IRChatResponse;
67
+ /**
68
+ * Execute non-streaming request.
69
+ * Uses polling to wait for async prediction.
70
+ */
71
+ execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
72
+ /**
73
+ * Execute streaming request.
74
+ * Replicate streaming is limited and varies by model.
75
+ */
76
+ executeStream(request: IRChatRequest, signal?: AbortSignal): IRChatStream;
77
+ /**
78
+ * Get HTTP headers.
79
+ */
80
+ private getHeaders;
81
+ /**
82
+ * Health check.
83
+ */
84
+ healthCheck(): Promise<boolean>;
85
+ /**
86
+ * Estimate cost.
87
+ * Replicate pricing varies significantly per model.
88
+ */
89
+ estimateCost(_request: IRChatRequest): Promise<number | null>;
90
+ }
91
+ //# sourceMappingURL=replicate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replicate.d.ts","sourceRoot":"","sources":["../../../src/providers/replicate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EAIb,MAAM,gBAAgB,CAAC;AAexB,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAEhB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACxE,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;;;;;;;;GAaG;AACH,qBAAa,uBAAwB,YAAW,cAAc,CAC5D,gBAAgB,EAChB,mBAAmB,CACpB;IACC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,MAAM,EAAE,oBAAoB;IA4BxC;;OAEG;IACI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB;IA4CvD;;OAEG;IACI,IAAI,CACT,UAAU,EAAE,mBAAmB,EAC/B,eAAe,EAAE,aAAa,EAC9B,SAAS,EAAE,MAAM,GAChB,cAAc;IA0CjB;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAwFpF;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,YAAY;IA2GhF;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAarC;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAK9D"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Together AI Backend Adapter
3
+ *
4
+ * Adapts Universal IR to Together AI Chat Completions API.
5
+ * Together AI is OpenAI-compatible with 200+ open-source models.
6
+ *
7
+ * @module
8
+ */
9
+ import type { BackendAdapter, BackendAdapterConfig, AdapterMetadata } from 'ai.matey.types';
10
+ import type { IRChatRequest, IRChatResponse, IRChatStream } from 'ai.matey.types';
11
+ export type TogetherAIMessageContent = string | Array<{
12
+ type: 'text';
13
+ text: string;
14
+ } | {
15
+ type: 'image_url';
16
+ image_url: {
17
+ url: string;
18
+ };
19
+ }>;
20
+ export interface TogetherAIMessage {
21
+ role: 'system' | 'user' | 'assistant' | 'tool';
22
+ content: TogetherAIMessageContent;
23
+ name?: string;
24
+ tool_calls?: Array<{
25
+ id: string;
26
+ type: 'function';
27
+ function: {
28
+ name: string;
29
+ arguments: string;
30
+ };
31
+ }>;
32
+ }
33
+ export interface TogetherAIRequest {
34
+ model: string;
35
+ messages: TogetherAIMessage[];
36
+ temperature?: number;
37
+ max_tokens?: number;
38
+ top_p?: number;
39
+ frequency_penalty?: number;
40
+ presence_penalty?: number;
41
+ stop?: string[];
42
+ stream?: boolean;
43
+ }
44
+ export interface TogetherAIResponse {
45
+ id: string;
46
+ object: 'chat.completion';
47
+ created: number;
48
+ model: string;
49
+ choices: Array<{
50
+ index: number;
51
+ message: TogetherAIMessage;
52
+ finish_reason: 'stop' | 'length' | 'tool_calls' | null;
53
+ }>;
54
+ usage?: {
55
+ prompt_tokens: number;
56
+ completion_tokens: number;
57
+ total_tokens: number;
58
+ };
59
+ }
60
+ export interface TogetherAIStreamChunk {
61
+ id: string;
62
+ object: 'chat.completion.chunk';
63
+ created: number;
64
+ model: string;
65
+ choices: Array<{
66
+ index: number;
67
+ delta: {
68
+ role?: 'assistant';
69
+ content?: string;
70
+ };
71
+ finish_reason: 'stop' | 'length' | null;
72
+ }>;
73
+ }
74
+ /**
75
+ * Backend adapter for Together AI Chat Completions API.
76
+ *
77
+ * Features:
78
+ * - 200+ open-source models
79
+ * - OpenAI-compatible API
80
+ * - Vision model support
81
+ * - Function calling support
82
+ * - Budget pricing starting at $0.06 per 1M tokens
83
+ */
84
+ export declare class TogetherAIBackendAdapter implements BackendAdapter<TogetherAIRequest, TogetherAIResponse> {
85
+ readonly metadata: AdapterMetadata;
86
+ private readonly config;
87
+ private readonly baseURL;
88
+ constructor(config: BackendAdapterConfig);
89
+ /**
90
+ * Convert IR to Together AI format.
91
+ */
92
+ fromIR(request: IRChatRequest): TogetherAIRequest;
93
+ /**
94
+ * Convert Together AI response to IR.
95
+ */
96
+ toIR(response: TogetherAIResponse, originalRequest: IRChatRequest, latencyMs: number): IRChatResponse;
97
+ /**
98
+ * Execute non-streaming request.
99
+ */
100
+ execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
101
+ /**
102
+ * Execute streaming request.
103
+ */
104
+ executeStream(request: IRChatRequest, signal?: AbortSignal): IRChatStream;
105
+ /**
106
+ * Get HTTP headers.
107
+ */
108
+ private getHeaders;
109
+ /**
110
+ * Health check.
111
+ */
112
+ healthCheck(): Promise<boolean>;
113
+ /**
114
+ * Estimate cost.
115
+ */
116
+ estimateCost(request: IRChatRequest): Promise<number | null>;
117
+ }
118
+ //# sourceMappingURL=together-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"together-ai.d.ts","sourceRoot":"","sources":["../../../src/providers/together-ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * xAI Backend Adapter
3
+ *
4
+ * Adapts Universal IR to xAI (Grok) Chat Completions API.
5
+ * xAI is OpenAI-compatible with Grok models featuring real-time search.
6
+ *
7
+ * @module
8
+ */
9
+ import type { BackendAdapter, BackendAdapterConfig, AdapterMetadata } from 'ai.matey.types';
10
+ import type { IRChatRequest, IRChatResponse, IRChatStream } from 'ai.matey.types';
11
+ export type XAIMessageContent = string | Array<{
12
+ type: 'text';
13
+ text: string;
14
+ } | {
15
+ type: 'image_url';
16
+ image_url: {
17
+ url: string;
18
+ };
19
+ }>;
20
+ export interface XAIMessage {
21
+ role: 'system' | 'user' | 'assistant' | 'tool';
22
+ content: XAIMessageContent;
23
+ name?: string;
24
+ tool_calls?: Array<{
25
+ id: string;
26
+ type: 'function';
27
+ function: {
28
+ name: string;
29
+ arguments: string;
30
+ };
31
+ }>;
32
+ }
33
+ export interface XAIRequest {
34
+ model: string;
35
+ messages: XAIMessage[];
36
+ temperature?: number;
37
+ max_tokens?: number;
38
+ top_p?: number;
39
+ frequency_penalty?: number;
40
+ presence_penalty?: number;
41
+ stop?: string[];
42
+ stream?: boolean;
43
+ }
44
+ export interface XAIResponse {
45
+ id: string;
46
+ object: 'chat.completion';
47
+ created: number;
48
+ model: string;
49
+ choices: Array<{
50
+ index: number;
51
+ message: XAIMessage;
52
+ finish_reason: 'stop' | 'length' | 'tool_calls' | null;
53
+ }>;
54
+ usage?: {
55
+ prompt_tokens: number;
56
+ completion_tokens: number;
57
+ total_tokens: number;
58
+ };
59
+ }
60
+ export interface XAIStreamChunk {
61
+ id: string;
62
+ object: 'chat.completion.chunk';
63
+ created: number;
64
+ model: string;
65
+ choices: Array<{
66
+ index: number;
67
+ delta: {
68
+ role?: 'assistant';
69
+ content?: string;
70
+ };
71
+ finish_reason: 'stop' | 'length' | null;
72
+ }>;
73
+ }
74
+ /**
75
+ * Backend adapter for xAI (Grok) Chat Completions API.
76
+ *
77
+ * Features:
78
+ * - Grok models with real-time search capabilities
79
+ * - OpenAI-compatible API
80
+ * - 2M context window
81
+ * - Vision model support (Grok-vision)
82
+ * - Function calling support
83
+ * - Premium pricing ($5-$15 per 1M tokens)
84
+ */
85
+ export declare class XAIBackendAdapter implements BackendAdapter<XAIRequest, XAIResponse> {
86
+ readonly metadata: AdapterMetadata;
87
+ private readonly config;
88
+ private readonly baseURL;
89
+ constructor(config: BackendAdapterConfig);
90
+ /**
91
+ * Convert IR to xAI format.
92
+ */
93
+ fromIR(request: IRChatRequest): XAIRequest;
94
+ /**
95
+ * Convert xAI response to IR.
96
+ */
97
+ toIR(response: XAIResponse, originalRequest: IRChatRequest, latencyMs: number): IRChatResponse;
98
+ /**
99
+ * Execute non-streaming request.
100
+ */
101
+ execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
102
+ /**
103
+ * Execute streaming request.
104
+ */
105
+ executeStream(request: IRChatRequest, signal?: AbortSignal): IRChatStream;
106
+ /**
107
+ * Get HTTP headers.
108
+ */
109
+ private getHeaders;
110
+ /**
111
+ * Health check.
112
+ */
113
+ healthCheck(): Promise<boolean>;
114
+ /**
115
+ * Estimate cost.
116
+ */
117
+ estimateCost(request: IRChatRequest): Promise<number | null>;
118
+ }
119
+ //# sourceMappingURL=xai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.d.ts","sourceRoot":"","sources":["../../../src/providers/xai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Backend Shared Utilities
3
+ *
4
+ * Common utilities shared across all backend adapters to reduce code duplication.
5
+ * These functions handle token estimation, model listing, and filtering.
6
+ *
7
+ * @module
8
+ */
9
+ import type { IRChatRequest, AIModel, ListModelsResult } from 'ai.matey.types';
10
+ /**
11
+ * Estimate token count for a chat request.
12
+ *
13
+ * Uses a rough heuristic of 4 characters per token, which provides
14
+ * a reasonable approximation across most LLMs.
15
+ *
16
+ * @param request - The IR chat request to estimate tokens for
17
+ * @returns Estimated token count
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const tokens = estimateTokens({
22
+ * messages: [{ role: 'user', content: 'Hello, how are you?' }],
23
+ * });
24
+ * // tokens ≈ 5
25
+ * ```
26
+ */
27
+ export declare function estimateTokens(request: IRChatRequest): number;
28
+ /**
29
+ * Build a ListModelsResult from static model configuration.
30
+ *
31
+ * Converts string model IDs or AIModel objects into a standardized result.
32
+ *
33
+ * @param models - Array of model IDs or AIModel objects
34
+ * @param ownedBy - Default owner for string-only model IDs
35
+ * @returns Standardized ListModelsResult
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * // With string IDs
40
+ * const result = buildStaticResult(['gpt-4', 'gpt-3.5-turbo'], 'openai');
41
+ *
42
+ * // With AIModel objects
43
+ * const result = buildStaticResult([
44
+ * { id: 'claude-3-sonnet', name: 'Claude 3 Sonnet', ownedBy: 'anthropic' }
45
+ * ]);
46
+ * ```
47
+ */
48
+ export declare function buildStaticResult(models: readonly (string | AIModel)[], ownedBy?: string): ListModelsResult;
49
+ /**
50
+ * Model capability filter options.
51
+ */
52
+ export interface ModelCapabilityFilter {
53
+ /** Filter models that support streaming */
54
+ readonly supportsStreaming?: boolean;
55
+ /** Filter models that support vision/image inputs */
56
+ readonly supportsVision?: boolean;
57
+ /** Filter models that support tool/function calling */
58
+ readonly supportsTools?: boolean;
59
+ /** Filter models that support JSON mode output */
60
+ readonly supportsJSON?: boolean;
61
+ }
62
+ /**
63
+ * Apply capability filter to a model list result.
64
+ *
65
+ * Filters the models based on their declared capabilities.
66
+ * Models without capability information are included by default.
67
+ *
68
+ * @param result - The model list result to filter
69
+ * @param filter - Optional capability filter criteria
70
+ * @returns Filtered ListModelsResult
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * const filtered = applyModelFilter(result, {
75
+ * supportsStreaming: true,
76
+ * supportsVision: true,
77
+ * });
78
+ * ```
79
+ */
80
+ export declare function applyModelFilter(result: ListModelsResult, filter?: ModelCapabilityFilter): ListModelsResult;
81
+ /**
82
+ * Cost rates per 1 million tokens.
83
+ */
84
+ export interface CostRates {
85
+ /** Cost per 1M input tokens */
86
+ inputPer1M: number;
87
+ /** Cost per 1M output tokens */
88
+ outputPer1M: number;
89
+ }
90
+ /**
91
+ * Estimate request cost based on token counts and provider rates.
92
+ *
93
+ * @param inputTokens - Estimated input token count
94
+ * @param outputTokens - Estimated output token count (defaults to maxTokens or 1000)
95
+ * @param rates - Cost rates per million tokens
96
+ * @returns Estimated cost in USD
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const cost = estimateCost(1000, 500, {
101
+ * inputPer1M: 3.00, // $3 per 1M input tokens
102
+ * outputPer1M: 15.00, // $15 per 1M output tokens
103
+ * });
104
+ * // cost ≈ $0.0105
105
+ * ```
106
+ */
107
+ export declare function estimateCost(inputTokens: number, outputTokens: number, rates: CostRates): number;
108
+ /**
109
+ * Default OpenAI models with capabilities.
110
+ */
111
+ export declare const DEFAULT_OPENAI_MODELS: readonly AIModel[];
112
+ /**
113
+ * Default Anthropic Claude models with capabilities.
114
+ */
115
+ export declare const DEFAULT_ANTHROPIC_MODELS: readonly AIModel[];
116
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/shared.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAM/E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAiB7D;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,EACrC,OAAO,SAAa,GACnB,gBAAgB,CAmBlB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,qDAAqD;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,kDAAkD;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,gBAAgB,CA4ClB;AAMD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAIhG;AAMD;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,OAAO,EAyD1C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,OAAO,EA2C7C,CAAC"}