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,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"}
|