@marktoflow/integrations 2.0.2 → 2.0.4-alpha.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 (111) hide show
  1. package/README.md +65 -16
  2. package/dist/adapters/claude-agent-types.d.ts +10 -8
  3. package/dist/adapters/claude-agent-types.d.ts.map +1 -1
  4. package/dist/adapters/claude-agent-types.js.map +1 -1
  5. package/dist/adapters/claude-agent-workflow.d.ts +10 -10
  6. package/dist/adapters/claude-agent.d.ts +2 -2
  7. package/dist/adapters/claude-agent.d.ts.map +1 -1
  8. package/dist/adapters/claude-agent.js +8 -2
  9. package/dist/adapters/claude-agent.js.map +1 -1
  10. package/dist/adapters/codex-types.d.ts +6 -6
  11. package/dist/adapters/codex-workflow.d.ts +16 -16
  12. package/dist/adapters/github-copilot-types.d.ts +21 -21
  13. package/dist/adapters/github-copilot-workflow.d.ts +8 -8
  14. package/dist/adapters/ollama-types.d.ts +42 -42
  15. package/dist/adapters/openai-types.d.ts +713 -0
  16. package/dist/adapters/openai-types.d.ts.map +1 -0
  17. package/dist/adapters/openai-types.js +91 -0
  18. package/dist/adapters/openai-types.js.map +1 -0
  19. package/dist/adapters/openai.d.ts +128 -0
  20. package/dist/adapters/openai.d.ts.map +1 -0
  21. package/dist/adapters/openai.js +387 -0
  22. package/dist/adapters/openai.js.map +1 -0
  23. package/dist/adapters/opencode.d.ts +25 -0
  24. package/dist/adapters/opencode.d.ts.map +1 -1
  25. package/dist/adapters/opencode.js +205 -15
  26. package/dist/adapters/opencode.js.map +1 -1
  27. package/dist/index.d.ts +3 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -4
  30. package/dist/index.js.map +1 -1
  31. package/dist/reliability/circuit-breaker.d.ts +67 -0
  32. package/dist/reliability/circuit-breaker.d.ts.map +1 -0
  33. package/dist/reliability/circuit-breaker.js +164 -0
  34. package/dist/reliability/circuit-breaker.js.map +1 -0
  35. package/dist/reliability/index.d.ts +3 -1
  36. package/dist/reliability/index.d.ts.map +1 -1
  37. package/dist/reliability/index.js +3 -1
  38. package/dist/reliability/index.js.map +1 -1
  39. package/dist/reliability/rate-limiter.d.ts +62 -0
  40. package/dist/reliability/rate-limiter.d.ts.map +1 -0
  41. package/dist/reliability/rate-limiter.js +194 -0
  42. package/dist/reliability/rate-limiter.js.map +1 -0
  43. package/dist/reliability/wrapper.d.ts +9 -0
  44. package/dist/reliability/wrapper.d.ts.map +1 -1
  45. package/dist/reliability/wrapper.js +62 -12
  46. package/dist/reliability/wrapper.js.map +1 -1
  47. package/dist/services/ai-browser.d.ts +3 -3
  48. package/dist/services/ai-browser.d.ts.map +1 -1
  49. package/dist/services/ai-browser.js +1 -1
  50. package/dist/services/ai-browser.js.map +1 -1
  51. package/dist/services/base-client.d.ts.map +1 -1
  52. package/dist/services/base-client.js +25 -3
  53. package/dist/services/base-client.js.map +1 -1
  54. package/dist/services/discord.d.ts.map +1 -1
  55. package/dist/services/discord.js +6 -0
  56. package/dist/services/discord.js.map +1 -1
  57. package/dist/services/gmail.d.ts.map +1 -1
  58. package/dist/services/gmail.js +65 -47
  59. package/dist/services/gmail.js.map +1 -1
  60. package/dist/services/google-calendar.js +9 -5
  61. package/dist/services/google-calendar.js.map +1 -1
  62. package/dist/services/google-docs.js +9 -5
  63. package/dist/services/google-docs.js.map +1 -1
  64. package/dist/services/google-drive.js +9 -5
  65. package/dist/services/google-drive.js.map +1 -1
  66. package/dist/services/google-sheets.js +9 -5
  67. package/dist/services/google-sheets.js.map +1 -1
  68. package/dist/services/http.d.ts.map +1 -1
  69. package/dist/services/http.js +15 -1
  70. package/dist/services/http.js.map +1 -1
  71. package/dist/services/mailchimp.d.ts.map +1 -1
  72. package/dist/services/mailchimp.js +3 -0
  73. package/dist/services/mailchimp.js.map +1 -1
  74. package/dist/services/outlook.d.ts.map +1 -1
  75. package/dist/services/outlook.js +14 -11
  76. package/dist/services/outlook.js.map +1 -1
  77. package/dist/services/playwright/client.d.ts +110 -0
  78. package/dist/services/playwright/client.d.ts.map +1 -0
  79. package/dist/services/playwright/client.js +690 -0
  80. package/dist/services/playwright/client.js.map +1 -0
  81. package/dist/services/playwright/index.d.ts +7 -0
  82. package/dist/services/playwright/index.d.ts.map +1 -0
  83. package/dist/services/playwright/index.js +7 -0
  84. package/dist/services/playwright/index.js.map +1 -0
  85. package/dist/services/playwright/initializer.d.ts +24 -0
  86. package/dist/services/playwright/initializer.d.ts.map +1 -0
  87. package/dist/services/playwright/initializer.js +99 -0
  88. package/dist/services/playwright/initializer.js.map +1 -0
  89. package/dist/services/playwright/types.d.ts +270 -0
  90. package/dist/services/playwright/types.d.ts.map +1 -0
  91. package/dist/services/playwright/types.js +5 -0
  92. package/dist/services/playwright/types.js.map +1 -0
  93. package/dist/services/playwright.d.ts +3 -675
  94. package/dist/services/playwright.d.ts.map +1 -1
  95. package/dist/services/playwright.js +3 -1138
  96. package/dist/services/playwright.js.map +1 -1
  97. package/dist/services/rss.d.ts +57 -0
  98. package/dist/services/rss.d.ts.map +1 -0
  99. package/dist/services/rss.js +190 -0
  100. package/dist/services/rss.js.map +1 -0
  101. package/dist/services/shopify.d.ts.map +1 -1
  102. package/dist/services/shopify.js +3 -0
  103. package/dist/services/shopify.js.map +1 -1
  104. package/dist/services/trello.d.ts.map +1 -1
  105. package/dist/services/trello.js +7 -1
  106. package/dist/services/trello.js.map +1 -1
  107. package/package.json +30 -8
  108. package/dist/adapters/claude-code.d.ts +0 -34
  109. package/dist/adapters/claude-code.d.ts.map +0 -1
  110. package/dist/adapters/claude-code.js +0 -89
  111. package/dist/adapters/claude-code.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-types.d.ts","sourceRoot":"","sources":["../../src/adapters/openai-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Type definitions for OpenAI SDK integration with marktoflow
3
+ *
4
+ * These types enable integration with OpenAI-compatible APIs including
5
+ * OpenAI, VLLM, llama.cpp, and other local/remote endpoints.
6
+ * Includes full tool calling and structured output support.
7
+ */
8
+ import { z } from 'zod';
9
+ // ============================================================================
10
+ // Zod Schemas
11
+ // ============================================================================
12
+ export const OpenAIClientConfigSchema = z.object({
13
+ baseUrl: z.string().optional(),
14
+ apiKey: z.string().optional(),
15
+ model: z.string().optional(),
16
+ organization: z.string().optional(),
17
+ timeout: z.number().positive().optional(),
18
+ });
19
+ export const OpenAIToolFunctionSchema = z.object({
20
+ name: z.string(),
21
+ description: z.string().optional(),
22
+ parameters: z.record(z.unknown()).optional(),
23
+ strict: z.boolean().optional(),
24
+ });
25
+ export const OpenAIToolSchema = z.object({
26
+ type: z.literal('function'),
27
+ function: OpenAIToolFunctionSchema,
28
+ });
29
+ export const OpenAIChatMessageSchema = z.discriminatedUnion('role', [
30
+ z.object({
31
+ role: z.literal('system'),
32
+ content: z.string(),
33
+ name: z.string().optional(),
34
+ }),
35
+ z.object({
36
+ role: z.literal('user'),
37
+ content: z.union([z.string(), z.array(z.unknown())]),
38
+ name: z.string().optional(),
39
+ }),
40
+ z.object({
41
+ role: z.literal('assistant'),
42
+ content: z.string().nullable(),
43
+ name: z.string().optional(),
44
+ tool_calls: z.array(z.object({
45
+ id: z.string(),
46
+ type: z.literal('function'),
47
+ function: z.object({
48
+ name: z.string(),
49
+ arguments: z.string(),
50
+ }),
51
+ })).optional(),
52
+ }),
53
+ z.object({
54
+ role: z.literal('tool'),
55
+ content: z.string(),
56
+ tool_call_id: z.string(),
57
+ }),
58
+ ]);
59
+ export const OpenAIChatOptionsSchema = z.object({
60
+ model: z.string().optional(),
61
+ messages: z.array(OpenAIChatMessageSchema),
62
+ temperature: z.number().min(0).max(2).optional(),
63
+ max_tokens: z.number().positive().optional(),
64
+ top_p: z.number().min(0).max(1).optional(),
65
+ n: z.number().positive().optional(),
66
+ stop: z.union([z.string(), z.array(z.string())]).optional(),
67
+ frequency_penalty: z.number().min(-2).max(2).optional(),
68
+ presence_penalty: z.number().min(-2).max(2).optional(),
69
+ tools: z.array(OpenAIToolSchema).optional(),
70
+ tool_choice: z.union([
71
+ z.enum(['auto', 'none', 'required']),
72
+ z.object({ type: z.literal('function'), function: z.object({ name: z.string() }) }),
73
+ ]).optional(),
74
+ response_format: z.union([
75
+ z.object({ type: z.literal('text') }),
76
+ z.object({ type: z.literal('json_object') }),
77
+ z.object({
78
+ type: z.literal('json_schema'),
79
+ json_schema: z.object({
80
+ name: z.string(),
81
+ schema: z.record(z.unknown()),
82
+ strict: z.boolean().optional(),
83
+ }),
84
+ }),
85
+ ]).optional(),
86
+ });
87
+ export const OpenAIEmbeddingOptionsSchema = z.object({
88
+ model: z.string().optional(),
89
+ input: z.union([z.string(), z.array(z.string())]),
90
+ });
91
+ //# sourceMappingURL=openai-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-types.js","sourceRoot":"","sources":["../../src/adapters/openai-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * OpenAI SDK Adapter for marktoflow
3
+ *
4
+ * This adapter provides integration with OpenAI-compatible APIs,
5
+ * including OpenAI, VLLM, llama.cpp, and other local/remote endpoints
6
+ * that implement the OpenAI API specification.
7
+ *
8
+ * Supports:
9
+ * - Chat completions (standard and streaming)
10
+ * - Tool calling / function calling with agentic loop
11
+ * - Structured output (JSON mode, JSON schema)
12
+ * - Embeddings
13
+ * - Model listing and discovery
14
+ */
15
+ import { SDKInitializer } from '@marktoflow/core';
16
+ import type { OpenAIClientConfig, OpenAIChatOptions, OpenAIChatResult, OpenAIEmbeddingOptions, OpenAIEmbeddingResult, OpenAIToolCall, OpenAIToolExecutor, OpenAIToolLoopOptions } from './openai-types.js';
17
+ export declare class OpenAIClient {
18
+ private client;
19
+ private defaultModel;
20
+ constructor(config?: OpenAIClientConfig);
21
+ /**
22
+ * Simple text generation from a prompt
23
+ */
24
+ generate(inputs: {
25
+ prompt: string;
26
+ model?: string;
27
+ } | string, model?: string): Promise<string>;
28
+ /**
29
+ * Full chat completion with all options including tools and response_format
30
+ */
31
+ chatCompletion(options: OpenAIChatOptions): Promise<OpenAIChatResult>;
32
+ /**
33
+ * Streaming chat completion
34
+ */
35
+ chatStream(options: OpenAIChatOptions): AsyncGenerator<string, void, unknown>;
36
+ /**
37
+ * Run an agentic tool-calling loop.
38
+ *
39
+ * Sends the conversation to the model. If the model responds with tool_calls,
40
+ * executes them via the provided executor, appends results, and re-sends.
41
+ * Repeats until the model returns a text response or maxTurns is reached.
42
+ *
43
+ * @param options - Chat options including tools definition
44
+ * @param toolExecutor - Function that executes a tool call and returns the result
45
+ * @returns Final chat result after all tool calls are resolved
46
+ */
47
+ chatWithTools(options: OpenAIToolLoopOptions, toolExecutor: OpenAIToolExecutor): Promise<OpenAIChatResult>;
48
+ /**
49
+ * Generate a response in JSON format.
50
+ * Uses response_format to ensure valid JSON output.
51
+ */
52
+ generateJSON<T = unknown>(options: Omit<OpenAIChatOptions, 'response_format'>): Promise<T>;
53
+ /**
54
+ * Generate a response matching a JSON schema.
55
+ * Uses structured outputs for guaranteed schema compliance.
56
+ */
57
+ generateStructured<T = unknown>(options: Omit<OpenAIChatOptions, 'response_format'> & {
58
+ schema: {
59
+ name: string;
60
+ schema: Record<string, unknown>;
61
+ strict?: boolean;
62
+ };
63
+ }): Promise<T>;
64
+ /**
65
+ * Create embeddings for text input
66
+ */
67
+ embeddings(options: OpenAIEmbeddingOptions): Promise<OpenAIEmbeddingResult>;
68
+ /**
69
+ * List available models
70
+ */
71
+ listModels(): Promise<Array<{
72
+ id: string;
73
+ owned_by: string;
74
+ }>>;
75
+ /**
76
+ * Auto-detect the default model from the server.
77
+ * Useful for local servers (llama.cpp) that serve a single model.
78
+ */
79
+ autoDetectModel(): Promise<string | null>;
80
+ /**
81
+ * Check if the API endpoint is available
82
+ */
83
+ isAvailable(): Promise<boolean>;
84
+ /**
85
+ * Get the default model
86
+ */
87
+ getDefaultModel(): string;
88
+ /**
89
+ * Set the default model
90
+ */
91
+ setDefaultModel(model: string): void;
92
+ /**
93
+ * OpenAI-compatible chat.completions interface
94
+ */
95
+ chat: {
96
+ completions: (inputs: {
97
+ model?: string;
98
+ messages: Array<{
99
+ role: string;
100
+ content: string;
101
+ }>;
102
+ temperature?: number;
103
+ max_tokens?: number;
104
+ tools?: Array<{
105
+ type: "function";
106
+ function: {
107
+ name: string;
108
+ description?: string;
109
+ parameters?: Record<string, unknown>;
110
+ };
111
+ }>;
112
+ tool_choice?: "auto" | "none" | "required";
113
+ response_format?: {
114
+ type: string;
115
+ };
116
+ }) => Promise<{
117
+ choices: Array<{
118
+ message: {
119
+ content: string | null;
120
+ tool_calls?: OpenAIToolCall[];
121
+ };
122
+ }>;
123
+ }>;
124
+ };
125
+ private mapResponse;
126
+ }
127
+ export declare const OpenAIInitializer: SDKInitializer;
128
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,387 @@
1
+ /**
2
+ * OpenAI SDK Adapter for marktoflow
3
+ *
4
+ * This adapter provides integration with OpenAI-compatible APIs,
5
+ * including OpenAI, VLLM, llama.cpp, and other local/remote endpoints
6
+ * that implement the OpenAI API specification.
7
+ *
8
+ * Supports:
9
+ * - Chat completions (standard and streaming)
10
+ * - Tool calling / function calling with agentic loop
11
+ * - Structured output (JSON mode, JSON schema)
12
+ * - Embeddings
13
+ * - Model listing and discovery
14
+ */
15
+ import OpenAI from 'openai';
16
+ // ============================================================================
17
+ // OpenAI Client
18
+ // ============================================================================
19
+ export class OpenAIClient {
20
+ client;
21
+ defaultModel;
22
+ constructor(config = {}) {
23
+ // For local endpoints (VLLM, llama.cpp), a dummy key is needed since the SDK requires non-empty string
24
+ const apiKey = config.apiKey || process.env.OPENAI_API_KEY || 'dummy-key';
25
+ this.client = new OpenAI({
26
+ apiKey,
27
+ baseURL: config.baseUrl || 'https://api.openai.com/v1',
28
+ organization: config.organization,
29
+ timeout: config.timeout || 60000,
30
+ });
31
+ this.defaultModel = config.model || 'gpt-4o';
32
+ }
33
+ // --------------------------------------------------------------------------
34
+ // Generation
35
+ // --------------------------------------------------------------------------
36
+ /**
37
+ * Simple text generation from a prompt
38
+ */
39
+ async generate(inputs, model) {
40
+ const prompt = typeof inputs === 'string' ? inputs : inputs.prompt;
41
+ const selectedModel = typeof inputs === 'object' && inputs.model ? inputs.model : model || this.defaultModel;
42
+ const response = await this.client.chat.completions.create({
43
+ model: selectedModel,
44
+ messages: [{ role: 'user', content: prompt }],
45
+ });
46
+ return response.choices[0]?.message?.content || '';
47
+ }
48
+ // --------------------------------------------------------------------------
49
+ // Chat Completions
50
+ // --------------------------------------------------------------------------
51
+ /**
52
+ * Full chat completion with all options including tools and response_format
53
+ */
54
+ async chatCompletion(options) {
55
+ const model = options.model || this.defaultModel;
56
+ // Build request parameters
57
+ const params = {
58
+ model,
59
+ messages: options.messages,
60
+ temperature: options.temperature,
61
+ max_tokens: options.max_tokens,
62
+ top_p: options.top_p,
63
+ n: options.n,
64
+ stop: options.stop,
65
+ frequency_penalty: options.frequency_penalty,
66
+ presence_penalty: options.presence_penalty,
67
+ };
68
+ // Add tools if provided
69
+ if (options.tools && options.tools.length > 0) {
70
+ params.tools = options.tools;
71
+ if (options.tool_choice) {
72
+ params.tool_choice = options.tool_choice;
73
+ }
74
+ }
75
+ // Add response format if provided
76
+ if (options.response_format) {
77
+ params.response_format = options.response_format;
78
+ }
79
+ const response = await this.client.chat.completions.create(params);
80
+ return this.mapResponse(response);
81
+ }
82
+ /**
83
+ * Streaming chat completion
84
+ */
85
+ async *chatStream(options) {
86
+ const model = options.model || this.defaultModel;
87
+ const params = {
88
+ model,
89
+ messages: options.messages,
90
+ temperature: options.temperature,
91
+ max_tokens: options.max_tokens,
92
+ stream: true,
93
+ };
94
+ if (options.tools && options.tools.length > 0) {
95
+ params.tools = options.tools;
96
+ if (options.tool_choice) {
97
+ params.tool_choice = options.tool_choice;
98
+ }
99
+ }
100
+ if (options.response_format) {
101
+ params.response_format = options.response_format;
102
+ }
103
+ const stream = await this.client.chat.completions.create(params);
104
+ for await (const chunk of stream) {
105
+ const content = chunk.choices[0]?.delta?.content;
106
+ if (content) {
107
+ yield content;
108
+ }
109
+ }
110
+ }
111
+ // --------------------------------------------------------------------------
112
+ // Tool Calling — Agentic Loop
113
+ // --------------------------------------------------------------------------
114
+ /**
115
+ * Run an agentic tool-calling loop.
116
+ *
117
+ * Sends the conversation to the model. If the model responds with tool_calls,
118
+ * executes them via the provided executor, appends results, and re-sends.
119
+ * Repeats until the model returns a text response or maxTurns is reached.
120
+ *
121
+ * @param options - Chat options including tools definition
122
+ * @param toolExecutor - Function that executes a tool call and returns the result
123
+ * @returns Final chat result after all tool calls are resolved
124
+ */
125
+ async chatWithTools(options, toolExecutor) {
126
+ const maxTurns = options.maxTurns ?? 10;
127
+ const messages = [...options.messages];
128
+ for (let turn = 0; turn < maxTurns; turn++) {
129
+ const result = await this.chatCompletion({
130
+ ...options,
131
+ messages,
132
+ });
133
+ const choice = result.choices[0];
134
+ if (!choice) {
135
+ return result;
136
+ }
137
+ // If no tool calls, we're done — model gave a final response
138
+ if (!choice.message.tool_calls || choice.message.tool_calls.length === 0) {
139
+ return result;
140
+ }
141
+ // Append the assistant's tool-calling message to conversation
142
+ messages.push({
143
+ role: 'assistant',
144
+ content: choice.message.content,
145
+ tool_calls: choice.message.tool_calls,
146
+ });
147
+ // Execute each tool call and append results
148
+ for (const toolCall of choice.message.tool_calls) {
149
+ if (options.onToolCall) {
150
+ options.onToolCall(toolCall);
151
+ }
152
+ let toolResult;
153
+ try {
154
+ const args = JSON.parse(toolCall.function.arguments);
155
+ toolResult = await toolExecutor(toolCall.function.name, args);
156
+ }
157
+ catch (error) {
158
+ toolResult = {
159
+ error: error instanceof Error ? error.message : String(error),
160
+ };
161
+ }
162
+ if (options.onToolResult) {
163
+ options.onToolResult(toolCall, toolResult);
164
+ }
165
+ // Append tool result as a tool message
166
+ const resultStr = typeof toolResult === 'string'
167
+ ? toolResult
168
+ : JSON.stringify(toolResult);
169
+ messages.push({
170
+ role: 'tool',
171
+ content: resultStr,
172
+ tool_call_id: toolCall.id,
173
+ });
174
+ }
175
+ }
176
+ // Max turns exceeded — return the last result
177
+ // Make one final call without tools to get a summary
178
+ return this.chatCompletion({
179
+ ...options,
180
+ messages,
181
+ tools: undefined,
182
+ tool_choice: undefined,
183
+ });
184
+ }
185
+ // --------------------------------------------------------------------------
186
+ // Structured Output
187
+ // --------------------------------------------------------------------------
188
+ /**
189
+ * Generate a response in JSON format.
190
+ * Uses response_format to ensure valid JSON output.
191
+ */
192
+ async generateJSON(options) {
193
+ const result = await this.chatCompletion({
194
+ ...options,
195
+ response_format: { type: 'json_object' },
196
+ });
197
+ const content = result.choices[0]?.message?.content;
198
+ if (!content) {
199
+ throw new Error('No content in response');
200
+ }
201
+ return JSON.parse(content);
202
+ }
203
+ /**
204
+ * Generate a response matching a JSON schema.
205
+ * Uses structured outputs for guaranteed schema compliance.
206
+ */
207
+ async generateStructured(options) {
208
+ const { schema, ...chatOptions } = options;
209
+ const result = await this.chatCompletion({
210
+ ...chatOptions,
211
+ response_format: {
212
+ type: 'json_schema',
213
+ json_schema: schema,
214
+ },
215
+ });
216
+ const content = result.choices[0]?.message?.content;
217
+ if (!content) {
218
+ throw new Error('No content in response');
219
+ }
220
+ return JSON.parse(content);
221
+ }
222
+ // --------------------------------------------------------------------------
223
+ // Embeddings
224
+ // --------------------------------------------------------------------------
225
+ /**
226
+ * Create embeddings for text input
227
+ */
228
+ async embeddings(options) {
229
+ const model = options.model || 'text-embedding-3-small';
230
+ const response = await this.client.embeddings.create({
231
+ model,
232
+ input: options.input,
233
+ });
234
+ return {
235
+ object: response.object,
236
+ data: response.data.map((item) => ({
237
+ object: item.object,
238
+ embedding: item.embedding,
239
+ index: item.index,
240
+ })),
241
+ model: response.model,
242
+ usage: {
243
+ prompt_tokens: response.usage.prompt_tokens,
244
+ total_tokens: response.usage.total_tokens,
245
+ },
246
+ };
247
+ }
248
+ // --------------------------------------------------------------------------
249
+ // Models
250
+ // --------------------------------------------------------------------------
251
+ /**
252
+ * List available models
253
+ */
254
+ async listModels() {
255
+ const response = await this.client.models.list();
256
+ const models = [];
257
+ for await (const model of response) {
258
+ models.push({ id: model.id, owned_by: model.owned_by });
259
+ }
260
+ return models;
261
+ }
262
+ /**
263
+ * Auto-detect the default model from the server.
264
+ * Useful for local servers (llama.cpp) that serve a single model.
265
+ */
266
+ async autoDetectModel() {
267
+ try {
268
+ const models = await this.listModels();
269
+ if (models.length > 0) {
270
+ this.defaultModel = models[0].id;
271
+ return models[0].id;
272
+ }
273
+ }
274
+ catch {
275
+ // Server may not support /models endpoint
276
+ }
277
+ return null;
278
+ }
279
+ // --------------------------------------------------------------------------
280
+ // Utility
281
+ // --------------------------------------------------------------------------
282
+ /**
283
+ * Check if the API endpoint is available
284
+ */
285
+ async isAvailable() {
286
+ try {
287
+ await this.client.models.list();
288
+ return true;
289
+ }
290
+ catch {
291
+ return false;
292
+ }
293
+ }
294
+ /**
295
+ * Get the default model
296
+ */
297
+ getDefaultModel() {
298
+ return this.defaultModel;
299
+ }
300
+ /**
301
+ * Set the default model
302
+ */
303
+ setDefaultModel(model) {
304
+ this.defaultModel = model;
305
+ }
306
+ // --------------------------------------------------------------------------
307
+ // OpenAI-Compatible Interface (for workflow compatibility)
308
+ // --------------------------------------------------------------------------
309
+ /**
310
+ * OpenAI-compatible chat.completions interface
311
+ */
312
+ chat = {
313
+ completions: async (inputs) => {
314
+ const params = {
315
+ model: inputs.model || this.defaultModel,
316
+ messages: inputs.messages,
317
+ temperature: inputs.temperature,
318
+ max_tokens: inputs.max_tokens,
319
+ };
320
+ if (inputs.tools)
321
+ params.tools = inputs.tools;
322
+ if (inputs.tool_choice)
323
+ params.tool_choice = inputs.tool_choice;
324
+ if (inputs.response_format)
325
+ params.response_format = inputs.response_format;
326
+ const response = await this.client.chat.completions.create(params);
327
+ return {
328
+ choices: response.choices.map((choice) => ({
329
+ message: {
330
+ content: choice.message.content || '',
331
+ tool_calls: choice.message.tool_calls,
332
+ },
333
+ })),
334
+ };
335
+ },
336
+ };
337
+ // --------------------------------------------------------------------------
338
+ // Private Helpers
339
+ // --------------------------------------------------------------------------
340
+ mapResponse(response) {
341
+ return {
342
+ id: response.id,
343
+ object: response.object,
344
+ created: response.created,
345
+ model: response.model,
346
+ choices: response.choices.map((choice, index) => ({
347
+ index,
348
+ message: {
349
+ role: choice.message.role,
350
+ content: choice.message.content || '',
351
+ tool_calls: choice.message.tool_calls,
352
+ },
353
+ finish_reason: choice.finish_reason || 'stop',
354
+ })),
355
+ usage: response.usage
356
+ ? {
357
+ prompt_tokens: response.usage.prompt_tokens,
358
+ completion_tokens: response.usage.completion_tokens,
359
+ total_tokens: response.usage.total_tokens,
360
+ }
361
+ : undefined,
362
+ };
363
+ }
364
+ }
365
+ // ============================================================================
366
+ // SDK Initializer
367
+ // ============================================================================
368
+ export const OpenAIInitializer = {
369
+ async initialize(_module, config) {
370
+ const auth = config.auth || {};
371
+ const options = config.options || {};
372
+ const clientConfig = {
373
+ baseUrl: auth['base_url'] || options['baseUrl'],
374
+ apiKey: auth['api_key'] || options['apiKey'],
375
+ model: options['model'],
376
+ organization: options['organization'],
377
+ timeout: options['timeout'],
378
+ };
379
+ const client = new OpenAIClient(clientConfig);
380
+ // Auto-detect model for local servers if model is 'auto' or not specified
381
+ if (clientConfig.baseUrl && (!clientConfig.model || clientConfig.model === 'auto')) {
382
+ await client.autoDetectModel();
383
+ }
384
+ return client;
385
+ },
386
+ };
387
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"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"}