@agentgazer/shared 0.3.5 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/format-converter.test.d.ts +2 -0
- package/dist/__tests__/format-converter.test.d.ts.map +1 -0
- package/dist/__tests__/format-converter.test.js +281 -0
- package/dist/__tests__/format-converter.test.js.map +1 -0
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +103 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/parsers.test.js +9 -2
- package/dist/__tests__/parsers.test.js.map +1 -1
- package/dist/__tests__/provider-validator.test.d.ts +2 -0
- package/dist/__tests__/provider-validator.test.d.ts.map +1 -0
- package/dist/__tests__/provider-validator.test.js +186 -0
- package/dist/__tests__/provider-validator.test.js.map +1 -0
- package/dist/format-converter.d.ts +305 -0
- package/dist/format-converter.d.ts.map +1 -0
- package/dist/format-converter.js +806 -0
- package/dist/format-converter.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers.d.ts +6 -0
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +14 -1
- package/dist/parsers.js.map +1 -1
- package/dist/pricing.d.ts +30 -1
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +66 -5
- package/dist/pricing.js.map +1 -1
- package/dist/types.d.ts +6 -6
- package/package.json +1 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const provider_validator_js_1 = require("../provider-validator.js");
|
|
5
|
+
(0, vitest_1.describe)("validateProviderKey", () => {
|
|
6
|
+
const originalFetch = global.fetch;
|
|
7
|
+
(0, vitest_1.beforeEach)(() => {
|
|
8
|
+
vitest_1.vi.resetAllMocks();
|
|
9
|
+
});
|
|
10
|
+
(0, vitest_1.afterEach)(() => {
|
|
11
|
+
global.fetch = originalFetch;
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.describe)("OpenAI validation", () => {
|
|
14
|
+
(0, vitest_1.it)("returns valid with models list on success", async () => {
|
|
15
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
16
|
+
ok: true,
|
|
17
|
+
status: 200,
|
|
18
|
+
json: () => Promise.resolve({
|
|
19
|
+
data: [{ id: "gpt-4o" }, { id: "gpt-4o-mini" }],
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("openai", "sk-test-key");
|
|
23
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
24
|
+
(0, vitest_1.expect)(result.models).toContain("gpt-4o");
|
|
25
|
+
(0, vitest_1.expect)(result.models).toContain("gpt-4o-mini");
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)("returns invalid for 401 status", async () => {
|
|
28
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
29
|
+
ok: false,
|
|
30
|
+
status: 401,
|
|
31
|
+
statusText: "Unauthorized",
|
|
32
|
+
});
|
|
33
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("openai", "invalid-key");
|
|
34
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
35
|
+
(0, vitest_1.expect)(result.error).toContain("Invalid API key");
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.it)("returns invalid on network error", async () => {
|
|
38
|
+
global.fetch = vitest_1.vi.fn().mockRejectedValue(new Error("Network error"));
|
|
39
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("openai", "sk-test-key");
|
|
40
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
41
|
+
(0, vitest_1.expect)(result.error).toContain("Network error");
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
(0, vitest_1.describe)("Anthropic validation", () => {
|
|
45
|
+
(0, vitest_1.it)("returns valid on successful response", async () => {
|
|
46
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
47
|
+
ok: true,
|
|
48
|
+
status: 200,
|
|
49
|
+
json: () => Promise.resolve({ id: "msg_123" }),
|
|
50
|
+
});
|
|
51
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("anthropic", "sk-ant-test");
|
|
52
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.it)("returns valid on rate limit (429)", async () => {
|
|
55
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
56
|
+
ok: false,
|
|
57
|
+
status: 429,
|
|
58
|
+
statusText: "Too Many Requests",
|
|
59
|
+
});
|
|
60
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("anthropic", "sk-ant-test");
|
|
61
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.it)("returns invalid for 401 status", async () => {
|
|
64
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
65
|
+
ok: false,
|
|
66
|
+
status: 401,
|
|
67
|
+
statusText: "Unauthorized",
|
|
68
|
+
});
|
|
69
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("anthropic", "invalid-key");
|
|
70
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
71
|
+
(0, vitest_1.expect)(result.error).toContain("Invalid API key");
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
(0, vitest_1.describe)("Google validation", () => {
|
|
75
|
+
(0, vitest_1.it)("returns valid with models list on success", async () => {
|
|
76
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
77
|
+
ok: true,
|
|
78
|
+
status: 200,
|
|
79
|
+
json: () => Promise.resolve({
|
|
80
|
+
models: [{ name: "models/gemini-pro" }, { name: "models/gemini-flash" }],
|
|
81
|
+
}),
|
|
82
|
+
});
|
|
83
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("google", "test-key");
|
|
84
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
85
|
+
(0, vitest_1.expect)(result.models).toContain("gemini-pro");
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.it)("returns invalid for 401/403 status", async () => {
|
|
88
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
89
|
+
ok: false,
|
|
90
|
+
status: 403,
|
|
91
|
+
statusText: "Forbidden",
|
|
92
|
+
});
|
|
93
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("google", "invalid-key");
|
|
94
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
95
|
+
(0, vitest_1.expect)(result.error).toContain("Invalid API key");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
(0, vitest_1.describe)("Mistral validation", () => {
|
|
99
|
+
(0, vitest_1.it)("returns valid with models list on success", async () => {
|
|
100
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
101
|
+
ok: true,
|
|
102
|
+
status: 200,
|
|
103
|
+
json: () => Promise.resolve({
|
|
104
|
+
data: [{ id: "mistral-large" }, { id: "mistral-small" }],
|
|
105
|
+
}),
|
|
106
|
+
});
|
|
107
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("mistral", "test-key");
|
|
108
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
109
|
+
(0, vitest_1.expect)(result.models).toContain("mistral-large");
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
(0, vitest_1.describe)("Cohere validation", () => {
|
|
113
|
+
(0, vitest_1.it)("returns valid with models list on success", async () => {
|
|
114
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
115
|
+
ok: true,
|
|
116
|
+
status: 200,
|
|
117
|
+
json: () => Promise.resolve({
|
|
118
|
+
models: [{ name: "command-r" }, { name: "command-r-plus" }],
|
|
119
|
+
}),
|
|
120
|
+
});
|
|
121
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("cohere", "test-key");
|
|
122
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
123
|
+
(0, vitest_1.expect)(result.models).toContain("command-r");
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
(0, vitest_1.describe)("DeepSeek validation", () => {
|
|
127
|
+
(0, vitest_1.it)("returns valid with models list on success", async () => {
|
|
128
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
129
|
+
ok: true,
|
|
130
|
+
status: 200,
|
|
131
|
+
json: () => Promise.resolve({
|
|
132
|
+
data: [{ id: "deepseek-chat" }, { id: "deepseek-coder" }],
|
|
133
|
+
}),
|
|
134
|
+
});
|
|
135
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("deepseek", "test-key");
|
|
136
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
137
|
+
(0, vitest_1.expect)(result.models).toContain("deepseek-chat");
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
(0, vitest_1.describe)("unsupported provider", () => {
|
|
141
|
+
(0, vitest_1.it)("returns error for unknown provider", async () => {
|
|
142
|
+
const result = await (0, provider_validator_js_1.validateProviderKey)("unknown", "test-key");
|
|
143
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
144
|
+
(0, vitest_1.expect)(result.error).toContain("not supported");
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.describe)("testProviderModel", () => {
|
|
149
|
+
const originalFetch = global.fetch;
|
|
150
|
+
(0, vitest_1.afterEach)(() => {
|
|
151
|
+
global.fetch = originalFetch;
|
|
152
|
+
});
|
|
153
|
+
(0, vitest_1.it)("returns exists true when model is in list", async () => {
|
|
154
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
155
|
+
ok: true,
|
|
156
|
+
status: 200,
|
|
157
|
+
json: () => Promise.resolve({
|
|
158
|
+
data: [{ id: "gpt-4o" }, { id: "gpt-4o-mini" }],
|
|
159
|
+
}),
|
|
160
|
+
});
|
|
161
|
+
const result = await (0, provider_validator_js_1.testProviderModel)("openai", "sk-test", "gpt-4o");
|
|
162
|
+
(0, vitest_1.expect)(result.exists).toBe(true);
|
|
163
|
+
});
|
|
164
|
+
(0, vitest_1.it)("returns exists false when model not in list", async () => {
|
|
165
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
166
|
+
ok: true,
|
|
167
|
+
status: 200,
|
|
168
|
+
json: () => Promise.resolve({
|
|
169
|
+
data: [{ id: "gpt-4o" }],
|
|
170
|
+
}),
|
|
171
|
+
});
|
|
172
|
+
const result = await (0, provider_validator_js_1.testProviderModel)("openai", "sk-test", "nonexistent-model");
|
|
173
|
+
(0, vitest_1.expect)(result.exists).toBe(false);
|
|
174
|
+
});
|
|
175
|
+
(0, vitest_1.it)("returns error when API key is invalid", async () => {
|
|
176
|
+
global.fetch = vitest_1.vi.fn().mockResolvedValue({
|
|
177
|
+
ok: false,
|
|
178
|
+
status: 401,
|
|
179
|
+
statusText: "Unauthorized",
|
|
180
|
+
});
|
|
181
|
+
const result = await (0, provider_validator_js_1.testProviderModel)("openai", "invalid-key", "gpt-4o");
|
|
182
|
+
(0, vitest_1.expect)(result.exists).toBe(false);
|
|
183
|
+
(0, vitest_1.expect)(result.error).toBeDefined();
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=provider-validator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-validator.test.js","sourceRoot":"","sources":["../../src/__tests__/provider-validator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format converter for cross-provider model override.
|
|
3
|
+
* Converts request/response formats between OpenAI and Anthropic APIs.
|
|
4
|
+
*/
|
|
5
|
+
export interface OpenAIContentPart {
|
|
6
|
+
type: "text" | "image_url";
|
|
7
|
+
text?: string;
|
|
8
|
+
image_url?: {
|
|
9
|
+
url: string;
|
|
10
|
+
detail?: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface OpenAIMessage {
|
|
14
|
+
role: "system" | "user" | "assistant" | "tool";
|
|
15
|
+
content: string | OpenAIContentPart[] | null;
|
|
16
|
+
name?: string;
|
|
17
|
+
tool_calls?: OpenAIToolCall[];
|
|
18
|
+
tool_call_id?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface OpenAIToolCall {
|
|
21
|
+
id: string;
|
|
22
|
+
type: "function";
|
|
23
|
+
function: {
|
|
24
|
+
name: string;
|
|
25
|
+
arguments: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface OpenAITool {
|
|
29
|
+
type: "function";
|
|
30
|
+
function: {
|
|
31
|
+
name: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
parameters?: Record<string, unknown>;
|
|
34
|
+
strict?: boolean;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface OpenAIRequest {
|
|
38
|
+
model: string;
|
|
39
|
+
messages: OpenAIMessage[];
|
|
40
|
+
max_tokens?: number;
|
|
41
|
+
temperature?: number;
|
|
42
|
+
top_p?: number;
|
|
43
|
+
stop?: string | string[];
|
|
44
|
+
stream?: boolean;
|
|
45
|
+
tools?: OpenAITool[];
|
|
46
|
+
tool_choice?: "none" | "auto" | "required" | {
|
|
47
|
+
type: "function";
|
|
48
|
+
function: {
|
|
49
|
+
name: string;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export interface OpenAIChoice {
|
|
54
|
+
index: number;
|
|
55
|
+
message: {
|
|
56
|
+
role: "assistant";
|
|
57
|
+
content: string | null;
|
|
58
|
+
tool_calls?: OpenAIToolCall[];
|
|
59
|
+
};
|
|
60
|
+
finish_reason: "stop" | "length" | "tool_calls" | "content_filter" | null;
|
|
61
|
+
}
|
|
62
|
+
export interface OpenAIResponse {
|
|
63
|
+
id: string;
|
|
64
|
+
object: "chat.completion";
|
|
65
|
+
created: number;
|
|
66
|
+
model: string;
|
|
67
|
+
choices: OpenAIChoice[];
|
|
68
|
+
usage?: {
|
|
69
|
+
prompt_tokens: number;
|
|
70
|
+
completion_tokens: number;
|
|
71
|
+
total_tokens: number;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface OpenAIStreamChunk {
|
|
75
|
+
id: string;
|
|
76
|
+
object: "chat.completion.chunk";
|
|
77
|
+
created: number;
|
|
78
|
+
model: string;
|
|
79
|
+
choices: Array<{
|
|
80
|
+
index: number;
|
|
81
|
+
delta: {
|
|
82
|
+
role?: "assistant";
|
|
83
|
+
content?: string;
|
|
84
|
+
tool_calls?: Array<{
|
|
85
|
+
index: number;
|
|
86
|
+
id?: string;
|
|
87
|
+
type?: "function";
|
|
88
|
+
function?: {
|
|
89
|
+
name?: string;
|
|
90
|
+
arguments?: string;
|
|
91
|
+
};
|
|
92
|
+
}>;
|
|
93
|
+
};
|
|
94
|
+
finish_reason: "stop" | "length" | "tool_calls" | null;
|
|
95
|
+
}>;
|
|
96
|
+
usage?: {
|
|
97
|
+
prompt_tokens: number;
|
|
98
|
+
completion_tokens: number;
|
|
99
|
+
total_tokens: number;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export interface AnthropicContentPart {
|
|
103
|
+
type: "text" | "image" | "tool_use" | "tool_result";
|
|
104
|
+
text?: string;
|
|
105
|
+
source?: {
|
|
106
|
+
type: "base64";
|
|
107
|
+
media_type: string;
|
|
108
|
+
data: string;
|
|
109
|
+
};
|
|
110
|
+
id?: string;
|
|
111
|
+
name?: string;
|
|
112
|
+
input?: Record<string, unknown>;
|
|
113
|
+
tool_use_id?: string;
|
|
114
|
+
content?: string | Array<{
|
|
115
|
+
type: "text";
|
|
116
|
+
text: string;
|
|
117
|
+
} | {
|
|
118
|
+
type: "image";
|
|
119
|
+
source: {
|
|
120
|
+
type: "base64";
|
|
121
|
+
media_type: string;
|
|
122
|
+
data: string;
|
|
123
|
+
};
|
|
124
|
+
}>;
|
|
125
|
+
is_error?: boolean;
|
|
126
|
+
}
|
|
127
|
+
export interface AnthropicMessage {
|
|
128
|
+
role: "user" | "assistant";
|
|
129
|
+
content: string | AnthropicContentPart[];
|
|
130
|
+
}
|
|
131
|
+
export interface AnthropicTool {
|
|
132
|
+
name: string;
|
|
133
|
+
description?: string;
|
|
134
|
+
input_schema: Record<string, unknown>;
|
|
135
|
+
}
|
|
136
|
+
export interface AnthropicRequest {
|
|
137
|
+
model: string;
|
|
138
|
+
system?: string;
|
|
139
|
+
messages: AnthropicMessage[];
|
|
140
|
+
max_tokens: number;
|
|
141
|
+
temperature?: number;
|
|
142
|
+
top_p?: number;
|
|
143
|
+
stop_sequences?: string[];
|
|
144
|
+
stream?: boolean;
|
|
145
|
+
tools?: AnthropicTool[];
|
|
146
|
+
tool_choice?: {
|
|
147
|
+
type: "auto" | "any" | "tool";
|
|
148
|
+
name?: string;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export interface AnthropicResponse {
|
|
152
|
+
id: string;
|
|
153
|
+
type: "message";
|
|
154
|
+
role: "assistant";
|
|
155
|
+
content: AnthropicContentPart[];
|
|
156
|
+
model: string;
|
|
157
|
+
stop_reason: "end_turn" | "max_tokens" | "stop_sequence" | "tool_use" | null;
|
|
158
|
+
usage: {
|
|
159
|
+
input_tokens: number;
|
|
160
|
+
output_tokens: number;
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export interface AnthropicMessageStart {
|
|
164
|
+
type: "message_start";
|
|
165
|
+
message: {
|
|
166
|
+
id: string;
|
|
167
|
+
type: "message";
|
|
168
|
+
role: "assistant";
|
|
169
|
+
content: [];
|
|
170
|
+
model: string;
|
|
171
|
+
stop_reason: null;
|
|
172
|
+
stop_sequence: null;
|
|
173
|
+
usage: {
|
|
174
|
+
input_tokens: number;
|
|
175
|
+
output_tokens: number;
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
export interface AnthropicContentBlockStart {
|
|
180
|
+
type: "content_block_start";
|
|
181
|
+
index: number;
|
|
182
|
+
content_block: {
|
|
183
|
+
type: "text";
|
|
184
|
+
text: string;
|
|
185
|
+
} | {
|
|
186
|
+
type: "tool_use";
|
|
187
|
+
id: string;
|
|
188
|
+
name: string;
|
|
189
|
+
input: Record<string, unknown>;
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
export interface AnthropicContentBlockDelta {
|
|
193
|
+
type: "content_block_delta";
|
|
194
|
+
index: number;
|
|
195
|
+
delta: {
|
|
196
|
+
type: "text_delta";
|
|
197
|
+
text: string;
|
|
198
|
+
} | {
|
|
199
|
+
type: "input_json_delta";
|
|
200
|
+
partial_json: string;
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
export interface AnthropicContentBlockStop {
|
|
204
|
+
type: "content_block_stop";
|
|
205
|
+
index: number;
|
|
206
|
+
}
|
|
207
|
+
export interface AnthropicMessageDelta {
|
|
208
|
+
type: "message_delta";
|
|
209
|
+
delta: {
|
|
210
|
+
stop_reason: "end_turn" | "max_tokens" | "stop_sequence" | "tool_use";
|
|
211
|
+
};
|
|
212
|
+
usage: {
|
|
213
|
+
output_tokens: number;
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
export interface AnthropicMessageStop {
|
|
217
|
+
type: "message_stop";
|
|
218
|
+
}
|
|
219
|
+
export type AnthropicSSEEvent = AnthropicMessageStart | AnthropicContentBlockStart | AnthropicContentBlockDelta | AnthropicContentBlockStop | AnthropicMessageDelta | AnthropicMessageStop;
|
|
220
|
+
/**
|
|
221
|
+
* Convert OpenAI chat completion request to Anthropic messages format.
|
|
222
|
+
*/
|
|
223
|
+
export declare function openaiToAnthropic(request: OpenAIRequest): AnthropicRequest;
|
|
224
|
+
/**
|
|
225
|
+
* Convert Anthropic messages request to OpenAI chat completion format.
|
|
226
|
+
* This is the reverse of openaiToAnthropic.
|
|
227
|
+
*/
|
|
228
|
+
export declare function anthropicToOpenaiRequest(request: AnthropicRequest): OpenAIRequest;
|
|
229
|
+
/**
|
|
230
|
+
* Convert OpenAI chat completion response to Anthropic messages format.
|
|
231
|
+
* This is the reverse of anthropicToOpenai.
|
|
232
|
+
*/
|
|
233
|
+
export declare function openaiToAnthropicResponse(response: OpenAIResponse, requestModel?: string): AnthropicResponse;
|
|
234
|
+
/**
|
|
235
|
+
* Convert Anthropic messages response to OpenAI chat completion format.
|
|
236
|
+
*/
|
|
237
|
+
export declare function anthropicToOpenai(response: AnthropicResponse, requestModel?: string): OpenAIResponse;
|
|
238
|
+
export interface StreamingConverterState {
|
|
239
|
+
messageId: string;
|
|
240
|
+
model: string;
|
|
241
|
+
created: number;
|
|
242
|
+
inputTokens: number;
|
|
243
|
+
outputTokens: number;
|
|
244
|
+
currentContentIndex: number;
|
|
245
|
+
toolCallsInProgress: Map<number, {
|
|
246
|
+
id: string;
|
|
247
|
+
name: string;
|
|
248
|
+
arguments: string;
|
|
249
|
+
}>;
|
|
250
|
+
}
|
|
251
|
+
export declare function createStreamingConverterState(): StreamingConverterState;
|
|
252
|
+
/**
|
|
253
|
+
* Convert Anthropic SSE event to OpenAI stream chunk(s).
|
|
254
|
+
* Returns array of chunks (may be empty, one, or multiple).
|
|
255
|
+
*/
|
|
256
|
+
export declare function anthropicSseToOpenaiChunks(event: AnthropicSSEEvent, state: StreamingConverterState, requestModel?: string): OpenAIStreamChunk[];
|
|
257
|
+
/**
|
|
258
|
+
* Parse Anthropic SSE line and return event object.
|
|
259
|
+
*/
|
|
260
|
+
export declare function parseAnthropicSSELine(eventType: string, data: string): AnthropicSSEEvent | null;
|
|
261
|
+
/**
|
|
262
|
+
* Format OpenAI stream chunk as SSE line.
|
|
263
|
+
*/
|
|
264
|
+
export declare function formatOpenAISSELine(chunk: OpenAIStreamChunk): string;
|
|
265
|
+
/**
|
|
266
|
+
* Format SSE done marker.
|
|
267
|
+
*/
|
|
268
|
+
export declare function formatOpenAISSEDone(): string;
|
|
269
|
+
export interface OpenAIToAnthropicStreamState {
|
|
270
|
+
messageId: string;
|
|
271
|
+
model: string;
|
|
272
|
+
inputTokens: number;
|
|
273
|
+
outputTokens: number;
|
|
274
|
+
sentMessageStart: boolean;
|
|
275
|
+
sentMessageStop: boolean;
|
|
276
|
+
contentBlockIndex: number;
|
|
277
|
+
contentBlockStarted: boolean;
|
|
278
|
+
toolCallsInProgress: Map<number, {
|
|
279
|
+
anthropicBlockIndex: number;
|
|
280
|
+
id: string;
|
|
281
|
+
name: string;
|
|
282
|
+
arguments: string;
|
|
283
|
+
}>;
|
|
284
|
+
}
|
|
285
|
+
export declare function createOpenAIToAnthropicStreamState(): OpenAIToAnthropicStreamState;
|
|
286
|
+
/**
|
|
287
|
+
* Convert OpenAI stream chunk to Anthropic SSE event(s).
|
|
288
|
+
* Returns array of SSE lines (formatted strings ready to send).
|
|
289
|
+
*/
|
|
290
|
+
export declare function openaiChunkToAnthropicSse(chunk: OpenAIStreamChunk, state: OpenAIToAnthropicStreamState, requestModel?: string): string[];
|
|
291
|
+
/**
|
|
292
|
+
* Format Anthropic SSE event as SSE line.
|
|
293
|
+
*/
|
|
294
|
+
export declare function formatAnthropicSSELine(eventType: string, data: object): string;
|
|
295
|
+
/**
|
|
296
|
+
* Finalize an OpenAI to Anthropic stream conversion.
|
|
297
|
+
* This ensures message_stop is sent even if the OpenAI stream ended unexpectedly.
|
|
298
|
+
* Returns SSE lines to close the stream properly.
|
|
299
|
+
*/
|
|
300
|
+
export declare function finalizeOpenAIToAnthropicStream(state: OpenAIToAnthropicStreamState): string[];
|
|
301
|
+
/**
|
|
302
|
+
* Check if the OpenAI to Anthropic stream has been properly finalized.
|
|
303
|
+
*/
|
|
304
|
+
export declare function isOpenAIToAnthropicStreamFinalized(state: OpenAIToAnthropicStreamState): boolean;
|
|
305
|
+
//# sourceMappingURL=format-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-converter.d.ts","sourceRoot":"","sources":["../src/format-converter.ts"],"names":[],"mappings":"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"}
|