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.
- package/LICENSE +21 -0
- package/dist/cjs/index.js +60 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/providers/ai21.js +331 -0
- package/dist/cjs/providers/ai21.js.map +1 -0
- package/dist/cjs/providers/anthropic.js +664 -0
- package/dist/cjs/providers/anthropic.js.map +1 -0
- package/dist/cjs/providers/anyscale.js +338 -0
- package/dist/cjs/providers/anyscale.js.map +1 -0
- package/dist/cjs/providers/aws-bedrock.js +374 -0
- package/dist/cjs/providers/aws-bedrock.js.map +1 -0
- package/dist/cjs/providers/azure-openai.js +406 -0
- package/dist/cjs/providers/azure-openai.js.map +1 -0
- package/dist/cjs/providers/cerebras.js +356 -0
- package/dist/cjs/providers/cerebras.js.map +1 -0
- package/dist/cjs/providers/cloudflare.js +359 -0
- package/dist/cjs/providers/cloudflare.js.map +1 -0
- package/dist/cjs/providers/cohere.js +368 -0
- package/dist/cjs/providers/cohere.js.map +1 -0
- package/dist/cjs/providers/deepinfra.js +343 -0
- package/dist/cjs/providers/deepinfra.js.map +1 -0
- package/dist/cjs/providers/deepseek.js +104 -0
- package/dist/cjs/providers/deepseek.js.map +1 -0
- package/dist/cjs/providers/fireworks.js +363 -0
- package/dist/cjs/providers/fireworks.js.map +1 -0
- package/dist/cjs/providers/gemini.js +292 -0
- package/dist/cjs/providers/gemini.js.map +1 -0
- package/dist/cjs/providers/groq.js +143 -0
- package/dist/cjs/providers/groq.js.map +1 -0
- package/dist/cjs/providers/huggingface.js +392 -0
- package/dist/cjs/providers/huggingface.js.map +1 -0
- package/dist/cjs/providers/lmstudio.js +144 -0
- package/dist/cjs/providers/lmstudio.js.map +1 -0
- package/dist/cjs/providers/mistral.js +288 -0
- package/dist/cjs/providers/mistral.js.map +1 -0
- package/dist/cjs/providers/nvidia.js +167 -0
- package/dist/cjs/providers/nvidia.js.map +1 -0
- package/dist/cjs/providers/ollama.js +257 -0
- package/dist/cjs/providers/ollama.js.map +1 -0
- package/dist/cjs/providers/openai.js +640 -0
- package/dist/cjs/providers/openai.js.map +1 -0
- package/dist/cjs/providers/openrouter.js +379 -0
- package/dist/cjs/providers/openrouter.js.map +1 -0
- package/dist/cjs/providers/perplexity.js +372 -0
- package/dist/cjs/providers/perplexity.js.map +1 -0
- package/dist/cjs/providers/replicate.js +340 -0
- package/dist/cjs/providers/replicate.js.map +1 -0
- package/dist/cjs/providers/together-ai.js +341 -0
- package/dist/cjs/providers/together-ai.js.map +1 -0
- package/dist/cjs/providers/xai.js +339 -0
- package/dist/cjs/providers/xai.js.map +1 -0
- package/dist/cjs/shared.js +279 -0
- package/dist/cjs/shared.js.map +1 -0
- package/dist/esm/index.js +44 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/providers/ai21.js +327 -0
- package/dist/esm/providers/ai21.js.map +1 -0
- package/dist/esm/providers/anthropic.js +660 -0
- package/dist/esm/providers/anthropic.js.map +1 -0
- package/dist/esm/providers/anyscale.js +334 -0
- package/dist/esm/providers/anyscale.js.map +1 -0
- package/dist/esm/providers/aws-bedrock.js +370 -0
- package/dist/esm/providers/aws-bedrock.js.map +1 -0
- package/dist/esm/providers/azure-openai.js +402 -0
- package/dist/esm/providers/azure-openai.js.map +1 -0
- package/dist/esm/providers/cerebras.js +352 -0
- package/dist/esm/providers/cerebras.js.map +1 -0
- package/dist/esm/providers/cloudflare.js +355 -0
- package/dist/esm/providers/cloudflare.js.map +1 -0
- package/dist/esm/providers/cohere.js +364 -0
- package/dist/esm/providers/cohere.js.map +1 -0
- package/dist/esm/providers/deepinfra.js +339 -0
- package/dist/esm/providers/deepinfra.js.map +1 -0
- package/dist/esm/providers/deepseek.js +99 -0
- package/dist/esm/providers/deepseek.js.map +1 -0
- package/dist/esm/providers/fireworks.js +359 -0
- package/dist/esm/providers/fireworks.js.map +1 -0
- package/dist/esm/providers/gemini.js +288 -0
- package/dist/esm/providers/gemini.js.map +1 -0
- package/dist/esm/providers/groq.js +138 -0
- package/dist/esm/providers/groq.js.map +1 -0
- package/dist/esm/providers/huggingface.js +387 -0
- package/dist/esm/providers/huggingface.js.map +1 -0
- package/dist/esm/providers/lmstudio.js +139 -0
- package/dist/esm/providers/lmstudio.js.map +1 -0
- package/dist/esm/providers/mistral.js +284 -0
- package/dist/esm/providers/mistral.js.map +1 -0
- package/dist/esm/providers/nvidia.js +162 -0
- package/dist/esm/providers/nvidia.js.map +1 -0
- package/dist/esm/providers/ollama.js +253 -0
- package/dist/esm/providers/ollama.js.map +1 -0
- package/dist/esm/providers/openai.js +636 -0
- package/dist/esm/providers/openai.js.map +1 -0
- package/dist/esm/providers/openrouter.js +375 -0
- package/dist/esm/providers/openrouter.js.map +1 -0
- package/dist/esm/providers/perplexity.js +368 -0
- package/dist/esm/providers/perplexity.js.map +1 -0
- package/dist/esm/providers/replicate.js +336 -0
- package/dist/esm/providers/replicate.js.map +1 -0
- package/dist/esm/providers/together-ai.js +337 -0
- package/dist/esm/providers/together-ai.js.map +1 -0
- package/dist/esm/providers/xai.js +335 -0
- package/dist/esm/providers/xai.js.map +1 -0
- package/dist/esm/shared.js +272 -0
- package/dist/esm/shared.js.map +1 -0
- package/dist/types/index.d.ts +38 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/providers/ai21.d.ts +106 -0
- package/dist/types/providers/ai21.d.ts.map +1 -0
- package/dist/types/providers/anthropic.d.ts +194 -0
- package/dist/types/providers/anthropic.d.ts.map +1 -0
- package/dist/types/providers/anyscale.d.ts +109 -0
- package/dist/types/providers/anyscale.d.ts.map +1 -0
- package/dist/types/providers/aws-bedrock.d.ts +152 -0
- package/dist/types/providers/aws-bedrock.d.ts.map +1 -0
- package/dist/types/providers/azure-openai.d.ts +142 -0
- package/dist/types/providers/azure-openai.d.ts.map +1 -0
- package/dist/types/providers/cerebras.d.ts +130 -0
- package/dist/types/providers/cerebras.d.ts.map +1 -0
- package/dist/types/providers/cloudflare.d.ts +125 -0
- package/dist/types/providers/cloudflare.d.ts.map +1 -0
- package/dist/types/providers/cohere.d.ts +114 -0
- package/dist/types/providers/cohere.d.ts.map +1 -0
- package/dist/types/providers/deepinfra.d.ts +118 -0
- package/dist/types/providers/deepinfra.d.ts.map +1 -0
- package/dist/types/providers/deepseek.d.ts +68 -0
- package/dist/types/providers/deepseek.d.ts.map +1 -0
- package/dist/types/providers/fireworks.d.ts +127 -0
- package/dist/types/providers/fireworks.d.ts.map +1 -0
- package/dist/types/providers/gemini.d.ts +71 -0
- package/dist/types/providers/gemini.d.ts.map +1 -0
- package/dist/types/providers/groq.d.ts +83 -0
- package/dist/types/providers/groq.d.ts.map +1 -0
- package/dist/types/providers/huggingface.d.ts +154 -0
- package/dist/types/providers/huggingface.d.ts.map +1 -0
- package/dist/types/providers/lmstudio.d.ts +88 -0
- package/dist/types/providers/lmstudio.d.ts.map +1 -0
- package/dist/types/providers/mistral.d.ts +65 -0
- package/dist/types/providers/mistral.d.ts.map +1 -0
- package/dist/types/providers/nvidia.d.ts +100 -0
- package/dist/types/providers/nvidia.d.ts.map +1 -0
- package/dist/types/providers/ollama.d.ts +59 -0
- package/dist/types/providers/ollama.d.ts.map +1 -0
- package/dist/types/providers/openai.d.ts +205 -0
- package/dist/types/providers/openai.d.ts.map +1 -0
- package/dist/types/providers/openrouter.d.ts +135 -0
- package/dist/types/providers/openrouter.d.ts.map +1 -0
- package/dist/types/providers/perplexity.d.ts +116 -0
- package/dist/types/providers/perplexity.d.ts.map +1 -0
- package/dist/types/providers/replicate.d.ts +91 -0
- package/dist/types/providers/replicate.d.ts.map +1 -0
- package/dist/types/providers/together-ai.d.ts +118 -0
- package/dist/types/providers/together-ai.d.ts.map +1 -0
- package/dist/types/providers/xai.d.ts +119 -0
- package/dist/types/providers/xai.d.ts.map +1 -0
- package/dist/types/shared.d.ts +116 -0
- package/dist/types/shared.d.ts.map +1 -0
- package/package.json +327 -0
- 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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"}
|