@ank1015/providers 0.0.1

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 (99) hide show
  1. package/README.md +453 -0
  2. package/biome.json +43 -0
  3. package/dist/agent/agent-loop.d.ts +5 -0
  4. package/dist/agent/agent-loop.d.ts.map +1 -0
  5. package/dist/agent/agent-loop.js +219 -0
  6. package/dist/agent/agent-loop.js.map +1 -0
  7. package/dist/agent/types.d.ts +67 -0
  8. package/dist/agent/types.d.ts.map +1 -0
  9. package/dist/agent/types.js +3 -0
  10. package/dist/agent/types.js.map +1 -0
  11. package/dist/index.d.ts +10 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +29 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/models.d.ts +3 -0
  16. package/dist/models.d.ts.map +1 -0
  17. package/dist/models.generated.d.ts +247 -0
  18. package/dist/models.generated.d.ts.map +1 -0
  19. package/dist/models.generated.js +315 -0
  20. package/dist/models.generated.js.map +1 -0
  21. package/dist/models.js +41 -0
  22. package/dist/models.js.map +1 -0
  23. package/dist/providers/convert.d.ts +6 -0
  24. package/dist/providers/convert.d.ts.map +1 -0
  25. package/dist/providers/convert.js +207 -0
  26. package/dist/providers/convert.js.map +1 -0
  27. package/dist/providers/google.d.ts +26 -0
  28. package/dist/providers/google.d.ts.map +1 -0
  29. package/dist/providers/google.js +434 -0
  30. package/dist/providers/google.js.map +1 -0
  31. package/dist/providers/openai.d.ts +17 -0
  32. package/dist/providers/openai.d.ts.map +1 -0
  33. package/dist/providers/openai.js +396 -0
  34. package/dist/providers/openai.js.map +1 -0
  35. package/dist/stream.d.ts +4 -0
  36. package/dist/stream.d.ts.map +1 -0
  37. package/dist/stream.js +40 -0
  38. package/dist/stream.js.map +1 -0
  39. package/dist/test-google-agent-loop.d.ts +2 -0
  40. package/dist/test-google-agent-loop.d.ts.map +1 -0
  41. package/dist/test-google-agent-loop.js +186 -0
  42. package/dist/test-google-agent-loop.js.map +1 -0
  43. package/dist/test-google.d.ts +2 -0
  44. package/dist/test-google.d.ts.map +1 -0
  45. package/dist/test-google.js +41 -0
  46. package/dist/test-google.js.map +1 -0
  47. package/dist/types.d.ts +187 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +10 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/utils/event-stream.d.ts +16 -0
  52. package/dist/utils/event-stream.d.ts.map +1 -0
  53. package/dist/utils/event-stream.js +61 -0
  54. package/dist/utils/event-stream.js.map +1 -0
  55. package/dist/utils/json-parse.d.ts +9 -0
  56. package/dist/utils/json-parse.d.ts.map +1 -0
  57. package/dist/utils/json-parse.js +32 -0
  58. package/dist/utils/json-parse.js.map +1 -0
  59. package/dist/utils/sanitize-unicode.d.ts +22 -0
  60. package/dist/utils/sanitize-unicode.d.ts.map +1 -0
  61. package/dist/utils/sanitize-unicode.js +29 -0
  62. package/dist/utils/sanitize-unicode.js.map +1 -0
  63. package/dist/utils/validation.d.ts +11 -0
  64. package/dist/utils/validation.d.ts.map +1 -0
  65. package/dist/utils/validation.js +61 -0
  66. package/dist/utils/validation.js.map +1 -0
  67. package/package.json +33 -0
  68. package/src/agent/agent-loop.ts +275 -0
  69. package/src/agent/types.ts +80 -0
  70. package/src/index.ts +72 -0
  71. package/src/models.generated.ts +314 -0
  72. package/src/models.ts +45 -0
  73. package/src/providers/convert.ts +222 -0
  74. package/src/providers/google.ts +496 -0
  75. package/src/providers/openai.ts +437 -0
  76. package/src/stream.ts +60 -0
  77. package/src/types.ts +198 -0
  78. package/src/utils/event-stream.ts +60 -0
  79. package/src/utils/json-parse.ts +28 -0
  80. package/src/utils/sanitize-unicode.ts +25 -0
  81. package/src/utils/validation.ts +69 -0
  82. package/test/core/agent-loop.test.ts +958 -0
  83. package/test/core/stream.test.ts +409 -0
  84. package/test/data/red-circle.png +0 -0
  85. package/test/data/superintelligentwill.pdf +0 -0
  86. package/test/edge-cases/general.test.ts +565 -0
  87. package/test/integration/e2e.test.ts +530 -0
  88. package/test/models/cost.test.ts +499 -0
  89. package/test/models/registry.test.ts +298 -0
  90. package/test/providers/convert.test.ts +846 -0
  91. package/test/providers/google-schema.test.ts +666 -0
  92. package/test/providers/google-stream.test.ts +369 -0
  93. package/test/providers/openai-stream.test.ts +251 -0
  94. package/test/utils/event-stream.test.ts +289 -0
  95. package/test/utils/json-parse.test.ts +344 -0
  96. package/test/utils/sanitize-unicode.test.ts +329 -0
  97. package/test/utils/validation.test.ts +614 -0
  98. package/tsconfig.json +21 -0
  99. package/vitest.config.ts +9 -0
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.agentLoop = agentLoop;
4
+ const event_stream_1 = require("../utils/event-stream");
5
+ const stream_1 = require("../stream");
6
+ const validation_1 = require("../utils/validation");
7
+ // Main prompt function - returns a stream of events
8
+ function agentLoop(prompt, context, config, signal) {
9
+ // Convert AgentContext to Context for stream
10
+ // Use a copy of messages to avoid mutating the original context
11
+ const stream = new event_stream_1.EventStream();
12
+ // Run the prompt async
13
+ (async () => {
14
+ // Track new messages generated during this prompt
15
+ const newMessages = [];
16
+ // Create user message for the prompt
17
+ const messages = [...context.messages, prompt];
18
+ newMessages.push(prompt);
19
+ stream.push({ type: "agent_start" });
20
+ stream.push({ type: "turn_start" });
21
+ stream.push({ type: "message_start", message: prompt });
22
+ stream.push({ type: "message_end", message: prompt });
23
+ // Update context with new messages
24
+ const currentContext = {
25
+ ...context,
26
+ messages,
27
+ };
28
+ // Keep looping while we have tool calls or queued messages
29
+ let hasMoreToolCalls = true;
30
+ let firstTurn = true;
31
+ let queuedMessages = [];
32
+ // Safely get queued messages, handling any errors
33
+ try {
34
+ queuedMessages = (await config.getQueuedMessages?.()) || [];
35
+ }
36
+ catch (error) {
37
+ console.warn("Error getting queued messages:", error instanceof Error ? error.message : String(error));
38
+ // Continue with empty queued messages
39
+ }
40
+ while (hasMoreToolCalls || queuedMessages.length > 0) {
41
+ if (!firstTurn) {
42
+ stream.push({ type: "turn_start" });
43
+ }
44
+ else {
45
+ firstTurn = false;
46
+ }
47
+ // Process queued messages first (inject before next assistant response)
48
+ if (queuedMessages.length > 0) {
49
+ for (const { original, llm } of queuedMessages) {
50
+ stream.push({ type: "message_start", message: original });
51
+ stream.push({ type: "message_end", message: original });
52
+ if (llm) {
53
+ currentContext.messages.push(llm);
54
+ newMessages.push(llm);
55
+ }
56
+ }
57
+ queuedMessages = [];
58
+ }
59
+ // Stream assistant response
60
+ const { finalAssistantMessage, finalMessage } = await streamAssistantResponse(currentContext, config, signal, stream);
61
+ newMessages.push(finalMessage);
62
+ currentContext.messages.push(finalMessage); // ✅ Add to context so LLM sees its previous responses!
63
+ // Check if assistant message is valid
64
+ if (!finalAssistantMessage) {
65
+ // This should never happen, but handle it gracefully
66
+ stream.push({ type: "agent_end", messages: newMessages, status: "error" });
67
+ stream.end(newMessages);
68
+ return;
69
+ }
70
+ if (finalAssistantMessage.stopReason === 'aborted' || finalAssistantMessage.stopReason === "error") {
71
+ stream.push({ type: "turn_end", message: finalAssistantMessage, toolResults: [] });
72
+ stream.push({
73
+ type: "agent_end",
74
+ messages: newMessages,
75
+ status: finalAssistantMessage.stopReason === 'aborted' ? "aborted" : "error"
76
+ });
77
+ stream.end(newMessages);
78
+ return;
79
+ }
80
+ // Check for tool calls
81
+ const toolCalls = finalAssistantMessage.content.filter((c) => c.type === "toolCall");
82
+ hasMoreToolCalls = toolCalls.length > 0;
83
+ const toolResults = [];
84
+ if (hasMoreToolCalls) {
85
+ // Execute tool calls
86
+ toolResults.push(...(await executeToolCalls(currentContext.tools, finalAssistantMessage, signal, stream)));
87
+ currentContext.messages.push(...toolResults);
88
+ newMessages.push(...toolResults);
89
+ }
90
+ stream.push({ type: "turn_end", message: finalAssistantMessage, toolResults: toolResults });
91
+ // Get queued messages after turn completes
92
+ try {
93
+ queuedMessages = (await config.getQueuedMessages?.()) || [];
94
+ }
95
+ catch (error) {
96
+ console.warn("Error getting queued messages:", error instanceof Error ? error.message : String(error));
97
+ queuedMessages = [];
98
+ }
99
+ }
100
+ stream.push({ type: "agent_end", messages: newMessages, status: "completed" });
101
+ stream.end(newMessages);
102
+ })();
103
+ return stream;
104
+ }
105
+ // Helper functions
106
+ async function streamAssistantResponse(context, config, signal, stream) {
107
+ // Convert AgentContext to Context for stream
108
+ // Use a copy of messages to avoid mutating the original context
109
+ const processedMessages = config.preprocessor
110
+ ? await config.preprocessor(context.messages, signal)
111
+ : [...context.messages];
112
+ const processedContext = {
113
+ systemPrompt: context.systemPrompt,
114
+ messages: [...processedMessages],
115
+ tools: context.tools
116
+ };
117
+ const response = (0, stream_1.stream)(config.model, processedContext, { ...config.providerOptions, signal });
118
+ let partialMessage = null;
119
+ let addedPartial = false;
120
+ for await (const event of response) {
121
+ switch (event.type) {
122
+ case "start":
123
+ partialMessage = event.partial;
124
+ // context.messages.push(partialMessage);
125
+ addedPartial = true;
126
+ stream.push({ type: "message_start", message: { ...partialMessage } });
127
+ break;
128
+ case "text_start":
129
+ case "text_delta":
130
+ case "text_end":
131
+ case "thinking_start":
132
+ case "thinking_delta":
133
+ case "thinking_end":
134
+ case "toolcall_start":
135
+ case "toolcall_delta":
136
+ case "toolcall_end":
137
+ if (partialMessage) {
138
+ partialMessage = event.partial;
139
+ // context.messages[context.messages.length - 1] = partialMessage;
140
+ stream.push({ type: "message_update", assistantMessageEvent: event, message: { ...partialMessage } });
141
+ }
142
+ break;
143
+ case "done":
144
+ case "error": {
145
+ const finalAssistantMessage = event.type === 'error' ? event.error : event.message;
146
+ if (!addedPartial) {
147
+ stream.push({ type: "message_start", message: { ...finalAssistantMessage } });
148
+ }
149
+ stream.push({ type: "message_end", message: finalAssistantMessage });
150
+ const finalMessage = await response.result();
151
+ return { finalMessage, finalAssistantMessage };
152
+ }
153
+ }
154
+ }
155
+ const finalMessage = await response.result();
156
+ return { finalAssistantMessage: partialMessage, finalMessage };
157
+ }
158
+ async function executeToolCalls(tools, assistantMessage, signal, stream) {
159
+ const toolCalls = assistantMessage.content.filter((c) => c.type === "toolCall");
160
+ const results = [];
161
+ for (const toolCall of toolCalls) {
162
+ const tool = tools?.find((t) => t.name === toolCall.name);
163
+ stream.push({
164
+ type: "tool_execution_start",
165
+ toolCallId: toolCall.id,
166
+ toolName: toolCall.name,
167
+ args: toolCall.arguments,
168
+ });
169
+ let resultOrError;
170
+ let isError = false;
171
+ let errorDetails;
172
+ try {
173
+ if (!tool) {
174
+ const availableTools = tools?.map((t) => t.name).join(", ") || "none";
175
+ throw new Error(`Tool "${toolCall.name}" not found. Available tools: ${availableTools}`);
176
+ }
177
+ // Validate arguments using shared validation function
178
+ const validatedArgs = (0, validation_1.validateToolArguments)(tool, toolCall);
179
+ // Execute with validated, typed arguments
180
+ resultOrError = await tool.execute(toolCall.id, validatedArgs, signal);
181
+ }
182
+ catch (e) {
183
+ resultOrError = e instanceof Error ? e.message : String(e);
184
+ isError = true;
185
+ // Preserve full error details for debugging
186
+ if (e instanceof Error) {
187
+ errorDetails = {
188
+ message: e.message,
189
+ name: e.name,
190
+ stack: e.stack,
191
+ };
192
+ }
193
+ }
194
+ stream.push({
195
+ type: "tool_execution_end",
196
+ toolCallId: toolCall.id,
197
+ toolName: toolCall.name,
198
+ result: resultOrError,
199
+ isError,
200
+ });
201
+ // Convert result to content blocks
202
+ const content = typeof resultOrError === "string" ? [{ type: "text", content: resultOrError }] : resultOrError.content;
203
+ const toolResultMessage = {
204
+ role: "toolResult",
205
+ toolCallId: toolCall.id,
206
+ toolName: toolCall.name,
207
+ content,
208
+ details: typeof resultOrError === "string" ? {} : resultOrError.details,
209
+ isError,
210
+ error: errorDetails,
211
+ timestamp: Date.now(),
212
+ };
213
+ results.push(toolResultMessage);
214
+ stream.push({ type: "message_start", message: toolResultMessage });
215
+ stream.push({ type: "message_end", message: toolResultMessage });
216
+ }
217
+ return results;
218
+ }
219
+ //# sourceMappingURL=agent-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/agent/agent-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Message, Tool, UserTextContent, UserImageContent, UserFileContent, ToolResultMessage, AssistantMessageEvent, AssistantMessage, Model, OptionsForApi, Api, UserMessage } from "../types";
2
+ import type { Static, TSchema } from "@sinclair/typebox";
3
+ export interface AgentToolResult<T> {
4
+ content: (UserTextContent | UserImageContent | UserFileContent)[];
5
+ details: T;
6
+ }
7
+ export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {
8
+ label: string;
9
+ execute: (toolCallId: string, params: Static<TParameters>, signal?: AbortSignal) => Promise<AgentToolResult<TDetails>>;
10
+ }
11
+ export interface AgentContext {
12
+ systemPrompt?: string;
13
+ messages: Message[];
14
+ tools?: readonly AgentTool<any>[];
15
+ }
16
+ export type AgentEvent = {
17
+ type: "agent_start";
18
+ } | {
19
+ type: "turn_start";
20
+ } | {
21
+ type: "message_start";
22
+ message: AssistantMessage | UserMessage | ToolResultMessage;
23
+ } | {
24
+ type: "message_update";
25
+ assistantMessageEvent: AssistantMessageEvent;
26
+ message: AssistantMessage;
27
+ } | {
28
+ type: "message_end";
29
+ message: AssistantMessage | UserMessage | ToolResultMessage;
30
+ } | {
31
+ type: "tool_execution_start";
32
+ toolCallId: string;
33
+ toolName: string;
34
+ args: any;
35
+ } | {
36
+ type: "tool_execution_end";
37
+ toolCallId: string;
38
+ toolName: string;
39
+ result: AgentToolResult<any> | string;
40
+ isError: boolean;
41
+ } | {
42
+ type: "turn_end";
43
+ message: AssistantMessage;
44
+ toolResults: ToolResultMessage[];
45
+ } | {
46
+ type: "agent_end";
47
+ messages: AgentContext["messages"];
48
+ status: "completed" | "aborted" | "error";
49
+ };
50
+ export interface QueuedMessage<TApp = Message> {
51
+ original: TApp;
52
+ llm?: Message;
53
+ }
54
+ export type ReasoningEffort = "minimal" | "low" | "medium" | "high";
55
+ export interface SimpleProviderOptions {
56
+ reasoning?: ReasoningEffort;
57
+ signal?: AbortSignal;
58
+ apiKey?: string;
59
+ maxTokens?: number;
60
+ }
61
+ export interface AgentLoopConfig<TApi extends Api> {
62
+ model: Model<TApi>;
63
+ preprocessor?: (messages: AgentContext["messages"], signal?: AbortSignal) => Promise<AgentContext["messages"]>;
64
+ providerOptions: OptionsForApi<TApi>;
65
+ getQueuedMessages?: <T>() => Promise<QueuedMessage<T>[]>;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export { stream } from "./stream";
2
+ export { agentLoop } from "./agent/agent-loop";
3
+ export type { Message, UserMessage, ToolResultMessage, NativeAssistantMessage, NativeOpenAIMessage, UserTextContent, UserImageContent, UserFileContent, AssistantTextContent, AssistantThinkingContent, AssistantToolCall, AbstractedImageContent, Context, Tool, Api, Model, AssistantMessage, AssistantMessageEvent, Usage, StopReason, OptionsForApi, StreamFunction, } from "./types";
4
+ export type { AgentContext, AgentTool, AgentToolResult, AgentEvent, AgentLoopConfig, QueuedMessage, } from "./agent/types";
5
+ export { MODELS } from "./models.generated";
6
+ export { calculateCost } from "./models";
7
+ export { defineTool } from "./types";
8
+ export type { ToolName, ToolNames } from "./types";
9
+ export { EventStream, AssistantMessageEventStream } from "./utils/event-stream";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAK/C,YAAY,EAEX,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EAGnB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EAGtB,OAAO,EACP,IAAI,EACJ,GAAG,EACH,KAAK,EAGL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,EACL,UAAU,EAGV,aAAa,EACb,cAAc,GACd,MAAM,SAAS,CAAC;AAKjB,YAAY,EAEX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,UAAU,EACV,eAAe,EACf,aAAa,GACb,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKnD,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssistantMessageEventStream = exports.EventStream = exports.defineTool = exports.calculateCost = exports.MODELS = exports.agentLoop = exports.stream = void 0;
4
+ // ============================================================================
5
+ // Main Functions
6
+ // ============================================================================
7
+ var stream_1 = require("./stream");
8
+ Object.defineProperty(exports, "stream", { enumerable: true, get: function () { return stream_1.stream; } });
9
+ var agent_loop_1 = require("./agent/agent-loop");
10
+ Object.defineProperty(exports, "agentLoop", { enumerable: true, get: function () { return agent_loop_1.agentLoop; } });
11
+ // ============================================================================
12
+ // Models and Registry
13
+ // ============================================================================
14
+ var models_generated_1 = require("./models.generated");
15
+ Object.defineProperty(exports, "MODELS", { enumerable: true, get: function () { return models_generated_1.MODELS; } });
16
+ var models_1 = require("./models");
17
+ Object.defineProperty(exports, "calculateCost", { enumerable: true, get: function () { return models_1.calculateCost; } });
18
+ // ============================================================================
19
+ // Utilities
20
+ // ============================================================================
21
+ var types_1 = require("./types");
22
+ Object.defineProperty(exports, "defineTool", { enumerable: true, get: function () { return types_1.defineTool; } });
23
+ // ============================================================================
24
+ // Event Streams
25
+ // ============================================================================
26
+ var event_stream_1 = require("./utils/event-stream");
27
+ Object.defineProperty(exports, "EventStream", { enumerable: true, get: function () { return event_stream_1.EventStream; } });
28
+ Object.defineProperty(exports, "AssistantMessageEventStream", { enumerable: true, get: function () { return event_stream_1.AssistantMessageEventStream; } });
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAC/E,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,iDAA+C;AAAtC,uGAAA,SAAS,OAAA;AAoDlB,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAC/E,uDAA4C;AAAnC,0GAAA,MAAM,OAAA;AACf,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AAEtB,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAC/E,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AAGnB,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAC/E,qDAAgF;AAAvE,2GAAA,WAAW,OAAA;AAAE,2HAAA,2BAA2B,OAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Api, Model, Usage } from "./types.js";
2
+ export declare function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage["cost"];
3
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAoCpD,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAO/F"}
@@ -0,0 +1,247 @@
1
+ export declare const MODELS: {
2
+ readonly google: {
3
+ readonly "gemini-2.5-flash-preview-05-20": {
4
+ id: string;
5
+ name: string;
6
+ api: "google";
7
+ baseUrl: string;
8
+ reasoning: true;
9
+ input: ("text" | "image")[];
10
+ cost: {
11
+ input: number;
12
+ output: number;
13
+ cacheRead: number;
14
+ cacheWrite: number;
15
+ };
16
+ contextWindow: number;
17
+ maxTokens: number;
18
+ };
19
+ readonly "gemini-flash-lite-latest": {
20
+ id: string;
21
+ name: string;
22
+ api: "google";
23
+ baseUrl: string;
24
+ reasoning: true;
25
+ input: ("text" | "image" | "file")[];
26
+ cost: {
27
+ input: number;
28
+ output: number;
29
+ cacheRead: number;
30
+ cacheWrite: number;
31
+ };
32
+ contextWindow: number;
33
+ maxTokens: number;
34
+ };
35
+ readonly "gemini-3-pro-preview": {
36
+ id: string;
37
+ name: string;
38
+ api: "google";
39
+ baseUrl: string;
40
+ reasoning: true;
41
+ input: ("text" | "image" | "file")[];
42
+ cost: {
43
+ input: number;
44
+ output: number;
45
+ cacheRead: number;
46
+ cacheWrite: number;
47
+ };
48
+ contextWindow: number;
49
+ maxTokens: number;
50
+ };
51
+ readonly "gemini-2.5-flash": {
52
+ id: string;
53
+ name: string;
54
+ api: "google";
55
+ baseUrl: string;
56
+ reasoning: true;
57
+ input: ("text" | "image" | "file")[];
58
+ cost: {
59
+ input: number;
60
+ output: number;
61
+ cacheRead: number;
62
+ cacheWrite: number;
63
+ };
64
+ contextWindow: number;
65
+ maxTokens: number;
66
+ };
67
+ };
68
+ readonly openai: {
69
+ readonly "gpt-5.1-codex": {
70
+ id: string;
71
+ name: string;
72
+ api: "openai";
73
+ baseUrl: string;
74
+ reasoning: true;
75
+ input: ("text" | "image" | "file")[];
76
+ cost: {
77
+ input: number;
78
+ output: number;
79
+ cacheRead: number;
80
+ cacheWrite: number;
81
+ };
82
+ contextWindow: number;
83
+ maxTokens: number;
84
+ };
85
+ readonly "gpt-5.1-codex-mini": {
86
+ id: string;
87
+ name: string;
88
+ api: "openai";
89
+ baseUrl: string;
90
+ reasoning: true;
91
+ input: ("text" | "image" | "file")[];
92
+ cost: {
93
+ input: number;
94
+ output: number;
95
+ cacheRead: number;
96
+ cacheWrite: number;
97
+ };
98
+ contextWindow: number;
99
+ maxTokens: number;
100
+ };
101
+ readonly "gpt-5.1": {
102
+ id: string;
103
+ name: string;
104
+ api: "openai";
105
+ baseUrl: string;
106
+ reasoning: true;
107
+ input: ("text" | "image" | "file")[];
108
+ cost: {
109
+ input: number;
110
+ output: number;
111
+ cacheRead: number;
112
+ cacheWrite: number;
113
+ };
114
+ contextWindow: number;
115
+ maxTokens: number;
116
+ };
117
+ readonly "codex-mini-latest": {
118
+ id: string;
119
+ name: string;
120
+ api: "openai";
121
+ baseUrl: string;
122
+ reasoning: true;
123
+ input: "text"[];
124
+ cost: {
125
+ input: number;
126
+ output: number;
127
+ cacheRead: number;
128
+ cacheWrite: number;
129
+ };
130
+ contextWindow: number;
131
+ maxTokens: number;
132
+ };
133
+ readonly "gpt-5-nano": {
134
+ id: string;
135
+ name: string;
136
+ api: "openai";
137
+ baseUrl: string;
138
+ reasoning: true;
139
+ input: ("text" | "image" | "file")[];
140
+ cost: {
141
+ input: number;
142
+ output: number;
143
+ cacheRead: number;
144
+ cacheWrite: number;
145
+ };
146
+ contextWindow: number;
147
+ maxTokens: number;
148
+ };
149
+ readonly "gpt-5-codex": {
150
+ id: string;
151
+ name: string;
152
+ api: "openai";
153
+ baseUrl: string;
154
+ reasoning: true;
155
+ input: ("text" | "image" | "file")[];
156
+ cost: {
157
+ input: number;
158
+ output: number;
159
+ cacheRead: number;
160
+ cacheWrite: number;
161
+ };
162
+ contextWindow: number;
163
+ maxTokens: number;
164
+ };
165
+ readonly "gpt-5-mini": {
166
+ id: string;
167
+ name: string;
168
+ api: "openai";
169
+ baseUrl: string;
170
+ reasoning: true;
171
+ input: ("text" | "image" | "file")[];
172
+ cost: {
173
+ input: number;
174
+ output: number;
175
+ cacheRead: number;
176
+ cacheWrite: number;
177
+ };
178
+ contextWindow: number;
179
+ maxTokens: number;
180
+ };
181
+ readonly "gpt-5.1-codex-max": {
182
+ id: string;
183
+ name: string;
184
+ api: "openai";
185
+ baseUrl: string;
186
+ reasoning: true;
187
+ input: ("text" | "image" | "file")[];
188
+ cost: {
189
+ input: number;
190
+ output: number;
191
+ cacheRead: number;
192
+ cacheWrite: number;
193
+ };
194
+ contextWindow: number;
195
+ maxTokens: number;
196
+ };
197
+ readonly "gpt-5": {
198
+ id: string;
199
+ name: string;
200
+ api: "openai";
201
+ baseUrl: string;
202
+ reasoning: true;
203
+ input: ("text" | "image" | "file")[];
204
+ cost: {
205
+ input: number;
206
+ output: number;
207
+ cacheRead: number;
208
+ cacheWrite: number;
209
+ };
210
+ contextWindow: number;
211
+ maxTokens: number;
212
+ };
213
+ readonly "gpt-5-pro": {
214
+ id: string;
215
+ name: string;
216
+ api: "openai";
217
+ baseUrl: string;
218
+ reasoning: true;
219
+ input: ("text" | "image" | "file")[];
220
+ cost: {
221
+ input: number;
222
+ output: number;
223
+ cacheRead: number;
224
+ cacheWrite: number;
225
+ };
226
+ contextWindow: number;
227
+ maxTokens: number;
228
+ };
229
+ readonly "gpt-5.1-chat-latest": {
230
+ id: string;
231
+ name: string;
232
+ api: "openai";
233
+ baseUrl: string;
234
+ reasoning: true;
235
+ input: ("text" | "image" | "file")[];
236
+ cost: {
237
+ input: number;
238
+ output: number;
239
+ cacheRead: number;
240
+ cacheWrite: number;
241
+ };
242
+ contextWindow: number;
243
+ maxTokens: number;
244
+ };
245
+ };
246
+ };
247
+ //# sourceMappingURL=models.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.generated.d.ts","sourceRoot":"","sources":["../src/models.generated.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoTT,CAAC"}