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 @@
1
+ {"version":3,"file":"mistral.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral.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;AAgBxB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,cAAc,CAAC;QACxB,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,IAAI,CAAC;KAC1D,CAAC,CAAC;IACH,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAMD,qBAAa,qBAAsB,YAAW,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC;IAC3F,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,oBAAoB;IA0BlC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAuC7E,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,YAAY;IA4H1E,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAarC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK5D;;;;OAIG;IACI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc;IA0BrD;;;;OAIG;IACI,IAAI,CACT,QAAQ,EAAE,eAAe,EACzB,eAAe,EAAE,aAAa,EAC9B,SAAS,EAAE,MAAM,GAChB,cAAc;IA8BjB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,cAAc;CASvB"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * NVIDIA Backend Adapter
3
+ *
4
+ * Adapts Universal IR to NVIDIA NIM (NVIDIA Inference Microservices) API.
5
+ * NVIDIA NIM provides optimized inference for various models with OpenAI-compatible endpoints.
6
+ *
7
+ * @module
8
+ */
9
+ import { OpenAIBackendAdapter, type OpenAIRequest, type OpenAIResponse } from './openai.js';
10
+ import type { BackendAdapter, BackendAdapterConfig, IRChatRequest } from 'ai.matey.types';
11
+ /**
12
+ * Backend adapter for NVIDIA NIM API.
13
+ *
14
+ * NVIDIA NIM (NVIDIA Inference Microservices) provides optimized inference
15
+ * with OpenAI-compatible API. Supports various models including Llama,
16
+ * Mistral, and other popular open-source models.
17
+ *
18
+ * @example Basic Usage
19
+ * ```typescript
20
+ * import { NVIDIABackendAdapter } from 'ai.matey';
21
+ *
22
+ * const adapter = new NVIDIABackendAdapter({
23
+ * apiKey: process.env.NVIDIA_API_KEY,
24
+ * });
25
+ * ```
26
+ *
27
+ * @example With Specific Model
28
+ * ```typescript
29
+ * const adapter = new NVIDIABackendAdapter({
30
+ * apiKey: process.env.NVIDIA_API_KEY,
31
+ * });
32
+ *
33
+ * const response = await adapter.execute({
34
+ * messages: [{ role: 'user', content: 'Hello!' }],
35
+ * parameters: {
36
+ * model: 'meta/llama-3.1-405b-instruct',
37
+ * },
38
+ * });
39
+ * ```
40
+ *
41
+ * @example With Custom NIM Endpoint
42
+ * ```typescript
43
+ * const adapter = new NVIDIABackendAdapter({
44
+ * apiKey: process.env.NVIDIA_API_KEY,
45
+ * baseURL: 'https://your-nim-endpoint.nvidia.com/v1',
46
+ * });
47
+ * ```
48
+ *
49
+ * @example Streaming with NVIDIA NIM
50
+ * ```typescript
51
+ * const stream = adapter.executeStream({
52
+ * messages: [{ role: 'user', content: 'Tell me a story' }],
53
+ * parameters: {
54
+ * model: 'nvidia/llama-3.1-nemotron-70b-instruct',
55
+ * },
56
+ * });
57
+ *
58
+ * for await (const chunk of stream) {
59
+ * if (chunk.type === 'content') {
60
+ * console.log(chunk.delta);
61
+ * }
62
+ * }
63
+ * ```
64
+ */
65
+ export declare class NVIDIABackendAdapter extends OpenAIBackendAdapter implements BackendAdapter<OpenAIRequest, OpenAIResponse> {
66
+ constructor(config: BackendAdapterConfig);
67
+ /**
68
+ * Health check for NVIDIA NIM API.
69
+ */
70
+ healthCheck(): Promise<boolean>;
71
+ /**
72
+ * Estimate cost for NVIDIA NIM.
73
+ */
74
+ estimateCost(request: IRChatRequest): Promise<number | null>;
75
+ }
76
+ /**
77
+ * Create an NVIDIA NIM backend adapter.
78
+ *
79
+ * @param config - Adapter configuration
80
+ * @returns NVIDIA backend adapter
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * import { createNVIDIAAdapter } from 'ai.matey';
85
+ *
86
+ * const adapter = createNVIDIAAdapter({
87
+ * apiKey: process.env.NVIDIA_API_KEY,
88
+ * });
89
+ * ```
90
+ *
91
+ * @example Self-Hosted NIM
92
+ * ```typescript
93
+ * const adapter = createNVIDIAAdapter({
94
+ * baseURL: 'http://localhost:8000/v1',
95
+ * apiKey: 'not-needed', // Self-hosted may not need API key
96
+ * });
97
+ * ```
98
+ */
99
+ export declare function createNVIDIAAdapter(config: BackendAdapterConfig): NVIDIABackendAdapter;
100
+ //# sourceMappingURL=nvidia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nvidia.d.ts","sourceRoot":"","sources":["../../../src/providers/nvidia.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,oBAAoB,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBAAa,oBACX,SAAQ,oBACR,YAAW,cAAc,CAAC,aAAa,EAAE,cAAc,CAAC;gBAE5C,MAAM,EAAE,oBAAoB;IAiCxC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAiBrC;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAkBnE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CAEtF"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Ollama Backend Adapter
3
+ *
4
+ * Adapts Universal IR to Ollama API.
5
+ * Ollama uses a local server with OpenAI-compatible chat format.
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 OllamaMessage {
12
+ role: 'system' | 'user' | 'assistant';
13
+ content: string;
14
+ }
15
+ export interface OllamaRequest {
16
+ model: string;
17
+ messages: OllamaMessage[];
18
+ options?: {
19
+ temperature?: number;
20
+ top_p?: number;
21
+ top_k?: number;
22
+ num_predict?: number;
23
+ stop?: string[];
24
+ };
25
+ stream?: boolean;
26
+ }
27
+ export interface OllamaResponse {
28
+ model: string;
29
+ created_at: string;
30
+ message: OllamaMessage;
31
+ done: boolean;
32
+ total_duration?: number;
33
+ load_duration?: number;
34
+ prompt_eval_count?: number;
35
+ eval_count?: number;
36
+ }
37
+ export declare class OllamaBackendAdapter implements BackendAdapter<OllamaRequest, OllamaResponse> {
38
+ readonly metadata: AdapterMetadata;
39
+ private readonly config;
40
+ private readonly baseURL;
41
+ constructor(config: BackendAdapterConfig);
42
+ execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
43
+ executeStream(request: IRChatRequest, signal?: AbortSignal): IRChatStream;
44
+ healthCheck(): Promise<boolean>;
45
+ estimateCost(_request: IRChatRequest): Promise<number | null>;
46
+ /**
47
+ * Convert IR request to Ollama format.
48
+ *
49
+ * Public method for testing and debugging - see what will be sent to Ollama.
50
+ */
51
+ fromIR(request: IRChatRequest): OllamaRequest;
52
+ /**
53
+ * Convert Ollama response to IR format.
54
+ *
55
+ * Public method for testing and debugging - parse Ollama responses manually.
56
+ */
57
+ toIR(response: OllamaResponse, originalRequest: IRChatRequest, latencyMs: number): IRChatResponse;
58
+ }
59
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/providers/ollama.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,EAGb,MAAM,gBAAgB,CAAC;AAexB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,oBAAqB,YAAW,cAAc,CAAC,aAAa,EAAE,cAAc,CAAC;IACxF,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,oBAAoB;IA0BlC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAoC7E,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,YAAY;IA0H1E,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAYrC,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI7D;;;;OAIG;IACI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa;IA6BpD;;;;OAIG;IACI,IAAI,CACT,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,aAAa,EAC9B,SAAS,EAAE,MAAM,GAChB,cAAc;CAuBlB"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * OpenAI Backend Adapter
3
+ *
4
+ * Adapts Universal IR to OpenAI Chat Completions API.
5
+ * Handles OpenAI's in-messages system message strategy and 0-2 temperature range.
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
+ import type { ListModelsOptions, ListModelsResult } from 'ai.matey.types';
12
+ /**
13
+ * OpenAI message content.
14
+ */
15
+ export type OpenAIMessageContent = string | Array<{
16
+ type: 'text';
17
+ text: string;
18
+ } | {
19
+ type: 'image_url';
20
+ image_url: {
21
+ url: string;
22
+ detail?: 'auto' | 'low' | 'high';
23
+ };
24
+ }>;
25
+ /**
26
+ * OpenAI message.
27
+ */
28
+ export interface OpenAIMessage {
29
+ role: 'system' | 'user' | 'assistant' | 'tool';
30
+ content: OpenAIMessageContent;
31
+ name?: string;
32
+ tool_call_id?: string;
33
+ tool_calls?: Array<{
34
+ id: string;
35
+ type: 'function';
36
+ function: {
37
+ name: string;
38
+ arguments: string;
39
+ };
40
+ }>;
41
+ }
42
+ /**
43
+ * OpenAI Chat Completions API request.
44
+ */
45
+ export interface OpenAIRequest {
46
+ model: string;
47
+ messages: OpenAIMessage[];
48
+ temperature?: number;
49
+ max_tokens?: number;
50
+ top_p?: number;
51
+ frequency_penalty?: number;
52
+ presence_penalty?: number;
53
+ stop?: string | string[];
54
+ stream?: boolean;
55
+ user?: string;
56
+ seed?: number;
57
+ }
58
+ /**
59
+ * OpenAI Chat Completions API response.
60
+ */
61
+ export interface OpenAIResponse {
62
+ id: string;
63
+ object: 'chat.completion';
64
+ created: number;
65
+ model: string;
66
+ choices: Array<{
67
+ index: number;
68
+ message: OpenAIMessage;
69
+ finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;
70
+ }>;
71
+ usage?: {
72
+ prompt_tokens: number;
73
+ completion_tokens: number;
74
+ total_tokens: number;
75
+ };
76
+ }
77
+ /**
78
+ * OpenAI streaming chunk.
79
+ */
80
+ export interface OpenAIStreamChunk {
81
+ id: string;
82
+ object: 'chat.completion.chunk';
83
+ created: number;
84
+ model: string;
85
+ choices: Array<{
86
+ index: number;
87
+ delta: {
88
+ role?: 'assistant';
89
+ content?: string;
90
+ tool_calls?: Array<{
91
+ index: number;
92
+ id?: string;
93
+ type?: 'function';
94
+ function?: {
95
+ name?: string;
96
+ arguments?: string;
97
+ };
98
+ }>;
99
+ };
100
+ finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;
101
+ }>;
102
+ }
103
+ /**
104
+ * OpenAI model object from /v1/models endpoint.
105
+ */
106
+ export interface OpenAIModel {
107
+ id: string;
108
+ object: 'model';
109
+ created: number;
110
+ owned_by: string;
111
+ }
112
+ /**
113
+ * OpenAI models list response.
114
+ */
115
+ export interface OpenAIModelsResponse {
116
+ object: 'list';
117
+ data: OpenAIModel[];
118
+ }
119
+ /**
120
+ * Backend adapter for OpenAI Chat Completions API.
121
+ */
122
+ export declare class OpenAIBackendAdapter implements BackendAdapter<OpenAIRequest, OpenAIResponse> {
123
+ readonly metadata: AdapterMetadata;
124
+ protected readonly config: BackendAdapterConfig;
125
+ protected readonly baseURL: string;
126
+ private readonly modelCache;
127
+ /**
128
+ * Create a new OpenAI backend adapter.
129
+ *
130
+ * @param config Backend adapter configuration
131
+ * @param metadataOverride Optional metadata to override defaults (used by subclasses)
132
+ */
133
+ constructor(config: BackendAdapterConfig, metadataOverride?: Partial<AdapterMetadata>);
134
+ /**
135
+ * Execute non-streaming chat completion request.
136
+ */
137
+ execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
138
+ /**
139
+ * Execute streaming chat completion request.
140
+ */
141
+ executeStream(request: IRChatRequest, signal?: AbortSignal): IRChatStream;
142
+ /**
143
+ * Health check to verify OpenAI API is accessible.
144
+ */
145
+ healthCheck(): Promise<boolean>;
146
+ /**
147
+ * Estimate cost for a request (rough heuristic).
148
+ */
149
+ estimateCost(request: IRChatRequest): Promise<number | null>;
150
+ /**
151
+ * List available models from OpenAI.
152
+ *
153
+ * This method supports three sources:
154
+ * 1. Static config (config.models) - highest priority
155
+ * 2. Cache (if enabled and not expired)
156
+ * 3. Remote API (/v1/models endpoint)
157
+ */
158
+ listModels(options?: ListModelsOptions): Promise<ListModelsResult>;
159
+ /**
160
+ * Invalidate the cached model list.
161
+ *
162
+ * Forces the next listModels() call to fetch fresh data from the API
163
+ * (unless static models are configured).
164
+ *
165
+ * @returns This adapter for method chaining
166
+ */
167
+ invalidateModelCache(): OpenAIBackendAdapter;
168
+ /**
169
+ * Convert IR request to OpenAI format.
170
+ *
171
+ * Public method for testing and debugging - see what will be sent to OpenAI.
172
+ */
173
+ fromIR(request: IRChatRequest): OpenAIRequest;
174
+ /**
175
+ * Convert OpenAI response to IR format.
176
+ *
177
+ * Public method for testing and debugging - parse OpenAI responses manually.
178
+ */
179
+ toIR(response: OpenAIResponse, originalRequest: IRChatRequest, latencyMs: number): IRChatResponse;
180
+ /**
181
+ * Convert IR message to OpenAI message.
182
+ */
183
+ private convertMessageToOpenAI;
184
+ /**
185
+ * Convert OpenAI message content to string.
186
+ */
187
+ private convertMessageContentFromOpenAI;
188
+ /**
189
+ * Map OpenAI finish reason to IR finish reason.
190
+ */
191
+ private mapFinishReason;
192
+ /**
193
+ * Make HTTP request to OpenAI API.
194
+ */
195
+ private makeRequest;
196
+ /**
197
+ * Get HTTP headers for OpenAI API requests.
198
+ */
199
+ private getHeaders;
200
+ /**
201
+ * Transform OpenAI model object to AIModel.
202
+ */
203
+ private transformOpenAIModel;
204
+ }
205
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * OpenRouter Backend Adapter
3
+ *
4
+ * Adapts Universal IR to OpenRouter Chat Completions API.
5
+ * OpenRouter is OpenAI-compatible with unified access to 100+ 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 OpenRouterMessageContent = string | Array<{
12
+ type: 'text';
13
+ text: string;
14
+ } | {
15
+ type: 'image_url';
16
+ image_url: {
17
+ url: string;
18
+ };
19
+ }>;
20
+ export interface OpenRouterMessage {
21
+ role: 'system' | 'user' | 'assistant' | 'tool';
22
+ content: OpenRouterMessageContent;
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 OpenRouterRequest {
34
+ model: string;
35
+ messages: OpenRouterMessage[];
36
+ temperature?: number;
37
+ max_tokens?: number;
38
+ top_p?: number;
39
+ top_k?: number;
40
+ frequency_penalty?: number;
41
+ presence_penalty?: number;
42
+ stop?: string[];
43
+ stream?: boolean;
44
+ seed?: number;
45
+ transforms?: string[];
46
+ route?: 'fallback';
47
+ provider?: {
48
+ order?: string[];
49
+ allow_fallbacks?: boolean;
50
+ };
51
+ }
52
+ export interface OpenRouterResponse {
53
+ id: string;
54
+ object: 'chat.completion';
55
+ created: number;
56
+ model: string;
57
+ choices: Array<{
58
+ index: number;
59
+ message: OpenRouterMessage;
60
+ finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;
61
+ }>;
62
+ usage?: {
63
+ prompt_tokens: number;
64
+ completion_tokens: number;
65
+ total_tokens: number;
66
+ };
67
+ }
68
+ export interface OpenRouterStreamChunk {
69
+ id: string;
70
+ object: 'chat.completion.chunk';
71
+ created: number;
72
+ model: string;
73
+ choices: Array<{
74
+ index: number;
75
+ delta: {
76
+ role?: 'assistant';
77
+ content?: string;
78
+ };
79
+ finish_reason: 'stop' | 'length' | 'content_filter' | null;
80
+ }>;
81
+ }
82
+ export interface OpenRouterConfig extends BackendAdapterConfig {
83
+ siteUrl?: string;
84
+ siteName?: string;
85
+ }
86
+ /**
87
+ * Backend adapter for OpenRouter Chat Completions API.
88
+ *
89
+ * Features:
90
+ * - Unified API for 100+ models from multiple providers
91
+ * - OpenAI-compatible with extensions
92
+ * - Automatic fallback routing
93
+ * - Vision model support
94
+ * - Function calling support
95
+ * - Variable pricing depending on model
96
+ */
97
+ export declare class OpenRouterBackendAdapter implements BackendAdapter<OpenRouterRequest, OpenRouterResponse> {
98
+ readonly metadata: AdapterMetadata;
99
+ private readonly config;
100
+ private readonly baseURL;
101
+ private readonly siteUrl;
102
+ private readonly siteName;
103
+ constructor(config: OpenRouterConfig);
104
+ /**
105
+ * Convert IR to OpenRouter format.
106
+ */
107
+ fromIR(request: IRChatRequest): OpenRouterRequest;
108
+ /**
109
+ * Convert OpenRouter response to IR.
110
+ */
111
+ toIR(response: OpenRouterResponse, originalRequest: IRChatRequest, latencyMs: number): IRChatResponse;
112
+ /**
113
+ * Execute non-streaming request.
114
+ */
115
+ execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
116
+ /**
117
+ * Execute streaming request.
118
+ */
119
+ executeStream(request: IRChatRequest, signal?: AbortSignal): IRChatStream;
120
+ /**
121
+ * Get HTTP headers.
122
+ * OpenRouter requires HTTP-Referer and X-Title headers.
123
+ */
124
+ private getHeaders;
125
+ /**
126
+ * Health check.
127
+ */
128
+ healthCheck(): Promise<boolean>;
129
+ /**
130
+ * Estimate cost.
131
+ * OpenRouter pricing varies by model.
132
+ */
133
+ estimateCost(request: IRChatRequest): Promise<number | null>;
134
+ }
135
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Perplexity AI Backend Adapter
3
+ *
4
+ * Adapts Universal IR to Perplexity AI Chat Completions API.
5
+ * Perplexity is OpenAI-compatible with search-augmented responses and citations.
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 PerplexityMessageContent = string | Array<{
12
+ type: 'text';
13
+ text: string;
14
+ } | {
15
+ type: 'image_url';
16
+ image_url: {
17
+ url: string;
18
+ };
19
+ }>;
20
+ export interface PerplexityMessage {
21
+ role: 'system' | 'user' | 'assistant';
22
+ content: PerplexityMessageContent;
23
+ }
24
+ export interface PerplexityRequest {
25
+ model: string;
26
+ messages: PerplexityMessage[];
27
+ temperature?: number;
28
+ max_tokens?: number;
29
+ top_p?: number;
30
+ frequency_penalty?: number;
31
+ presence_penalty?: number;
32
+ stop?: string[];
33
+ stream?: boolean;
34
+ search_domain_filter?: string[];
35
+ return_citations?: boolean;
36
+ return_images?: boolean;
37
+ search_recency_filter?: string;
38
+ }
39
+ export interface PerplexityResponse {
40
+ id: string;
41
+ object: 'chat.completion';
42
+ created: number;
43
+ model: string;
44
+ choices: Array<{
45
+ index: number;
46
+ message: PerplexityMessage;
47
+ finish_reason: 'stop' | 'length' | null;
48
+ }>;
49
+ usage?: {
50
+ prompt_tokens: number;
51
+ completion_tokens: number;
52
+ total_tokens: number;
53
+ };
54
+ citations?: string[];
55
+ }
56
+ export interface PerplexityStreamChunk {
57
+ id: string;
58
+ object: 'chat.completion.chunk';
59
+ created: number;
60
+ model: string;
61
+ choices: Array<{
62
+ index: number;
63
+ delta: {
64
+ role?: 'assistant';
65
+ content?: string;
66
+ };
67
+ finish_reason: 'stop' | 'length' | null;
68
+ }>;
69
+ citations?: string[];
70
+ }
71
+ /**
72
+ * Backend adapter for Perplexity AI Chat Completions API.
73
+ *
74
+ * Features:
75
+ * - Search-augmented responses with real-time web search
76
+ * - Citations and source URLs
77
+ * - OpenAI-compatible API
78
+ * - Online and offline models
79
+ * - Domain filtering and recency filtering
80
+ * - Pricing around $1 per 1M tokens
81
+ */
82
+ export declare class PerplexityBackendAdapter implements BackendAdapter<PerplexityRequest, PerplexityResponse> {
83
+ readonly metadata: AdapterMetadata;
84
+ private readonly config;
85
+ private readonly baseURL;
86
+ constructor(config: BackendAdapterConfig);
87
+ /**
88
+ * Convert IR to Perplexity format.
89
+ */
90
+ fromIR(request: IRChatRequest): PerplexityRequest;
91
+ /**
92
+ * Convert Perplexity response to IR.
93
+ */
94
+ toIR(response: PerplexityResponse, originalRequest: IRChatRequest, latencyMs: number): IRChatResponse;
95
+ /**
96
+ * Execute non-streaming request.
97
+ */
98
+ execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
99
+ /**
100
+ * Execute streaming request.
101
+ */
102
+ executeStream(request: IRChatRequest, signal?: AbortSignal): IRChatStream;
103
+ /**
104
+ * Get HTTP headers.
105
+ */
106
+ private getHeaders;
107
+ /**
108
+ * Health check.
109
+ */
110
+ healthCheck(): Promise<boolean>;
111
+ /**
112
+ * Estimate cost.
113
+ */
114
+ estimateCost(request: IRChatRequest): Promise<number | null>;
115
+ }
116
+ //# sourceMappingURL=perplexity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perplexity.d.ts","sourceRoot":"","sources":["../../../src/providers/perplexity.ts"],"names":[],"mappings":"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"}