@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.
- package/README.md +65 -16
- package/dist/adapters/claude-agent-types.d.ts +10 -8
- package/dist/adapters/claude-agent-types.d.ts.map +1 -1
- package/dist/adapters/claude-agent-types.js.map +1 -1
- package/dist/adapters/claude-agent-workflow.d.ts +10 -10
- package/dist/adapters/claude-agent.d.ts +2 -2
- package/dist/adapters/claude-agent.d.ts.map +1 -1
- package/dist/adapters/claude-agent.js +8 -2
- package/dist/adapters/claude-agent.js.map +1 -1
- package/dist/adapters/codex-types.d.ts +6 -6
- package/dist/adapters/codex-workflow.d.ts +16 -16
- package/dist/adapters/github-copilot-types.d.ts +21 -21
- package/dist/adapters/github-copilot-workflow.d.ts +8 -8
- package/dist/adapters/ollama-types.d.ts +42 -42
- package/dist/adapters/openai-types.d.ts +713 -0
- package/dist/adapters/openai-types.d.ts.map +1 -0
- package/dist/adapters/openai-types.js +91 -0
- package/dist/adapters/openai-types.js.map +1 -0
- package/dist/adapters/openai.d.ts +128 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +387 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/adapters/opencode.d.ts +25 -0
- package/dist/adapters/opencode.d.ts.map +1 -1
- package/dist/adapters/opencode.js +205 -15
- package/dist/adapters/opencode.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/reliability/circuit-breaker.d.ts +67 -0
- package/dist/reliability/circuit-breaker.d.ts.map +1 -0
- package/dist/reliability/circuit-breaker.js +164 -0
- package/dist/reliability/circuit-breaker.js.map +1 -0
- package/dist/reliability/index.d.ts +3 -1
- package/dist/reliability/index.d.ts.map +1 -1
- package/dist/reliability/index.js +3 -1
- package/dist/reliability/index.js.map +1 -1
- package/dist/reliability/rate-limiter.d.ts +62 -0
- package/dist/reliability/rate-limiter.d.ts.map +1 -0
- package/dist/reliability/rate-limiter.js +194 -0
- package/dist/reliability/rate-limiter.js.map +1 -0
- package/dist/reliability/wrapper.d.ts +9 -0
- package/dist/reliability/wrapper.d.ts.map +1 -1
- package/dist/reliability/wrapper.js +62 -12
- package/dist/reliability/wrapper.js.map +1 -1
- package/dist/services/ai-browser.d.ts +3 -3
- package/dist/services/ai-browser.d.ts.map +1 -1
- package/dist/services/ai-browser.js +1 -1
- package/dist/services/ai-browser.js.map +1 -1
- package/dist/services/base-client.d.ts.map +1 -1
- package/dist/services/base-client.js +25 -3
- package/dist/services/base-client.js.map +1 -1
- package/dist/services/discord.d.ts.map +1 -1
- package/dist/services/discord.js +6 -0
- package/dist/services/discord.js.map +1 -1
- package/dist/services/gmail.d.ts.map +1 -1
- package/dist/services/gmail.js +65 -47
- package/dist/services/gmail.js.map +1 -1
- package/dist/services/google-calendar.js +9 -5
- package/dist/services/google-calendar.js.map +1 -1
- package/dist/services/google-docs.js +9 -5
- package/dist/services/google-docs.js.map +1 -1
- package/dist/services/google-drive.js +9 -5
- package/dist/services/google-drive.js.map +1 -1
- package/dist/services/google-sheets.js +9 -5
- package/dist/services/google-sheets.js.map +1 -1
- package/dist/services/http.d.ts.map +1 -1
- package/dist/services/http.js +15 -1
- package/dist/services/http.js.map +1 -1
- package/dist/services/mailchimp.d.ts.map +1 -1
- package/dist/services/mailchimp.js +3 -0
- package/dist/services/mailchimp.js.map +1 -1
- package/dist/services/outlook.d.ts.map +1 -1
- package/dist/services/outlook.js +14 -11
- package/dist/services/outlook.js.map +1 -1
- package/dist/services/playwright/client.d.ts +110 -0
- package/dist/services/playwright/client.d.ts.map +1 -0
- package/dist/services/playwright/client.js +690 -0
- package/dist/services/playwright/client.js.map +1 -0
- package/dist/services/playwright/index.d.ts +7 -0
- package/dist/services/playwright/index.d.ts.map +1 -0
- package/dist/services/playwright/index.js +7 -0
- package/dist/services/playwright/index.js.map +1 -0
- package/dist/services/playwright/initializer.d.ts +24 -0
- package/dist/services/playwright/initializer.d.ts.map +1 -0
- package/dist/services/playwright/initializer.js +99 -0
- package/dist/services/playwright/initializer.js.map +1 -0
- package/dist/services/playwright/types.d.ts +270 -0
- package/dist/services/playwright/types.d.ts.map +1 -0
- package/dist/services/playwright/types.js +5 -0
- package/dist/services/playwright/types.js.map +1 -0
- package/dist/services/playwright.d.ts +3 -675
- package/dist/services/playwright.d.ts.map +1 -1
- package/dist/services/playwright.js +3 -1138
- package/dist/services/playwright.js.map +1 -1
- package/dist/services/rss.d.ts +57 -0
- package/dist/services/rss.d.ts.map +1 -0
- package/dist/services/rss.js +190 -0
- package/dist/services/rss.js.map +1 -0
- package/dist/services/shopify.d.ts.map +1 -1
- package/dist/services/shopify.js +3 -0
- package/dist/services/shopify.js.map +1 -1
- package/dist/services/trello.d.ts.map +1 -1
- package/dist/services/trello.js +7 -1
- package/dist/services/trello.js.map +1 -1
- package/package.json +30 -8
- package/dist/adapters/claude-code.d.ts +0 -34
- package/dist/adapters/claude-code.d.ts.map +0 -1
- package/dist/adapters/claude-code.js +0 -89
- 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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"}
|