@agentick/openai 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.
- package/LICENSE +21 -0
- package/README.md +86 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/.tsbuildinfo.build +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/openai-model.d.ts +39 -0
- package/dist/openai-model.d.ts.map +1 -0
- package/dist/openai-model.js +38 -0
- package/dist/openai-model.js.map +1 -0
- package/dist/openai-model.jsx +38 -0
- package/dist/openai-model.jsx.map +1 -0
- package/dist/openai.d.ts +47 -0
- package/dist/openai.d.ts.map +1 -0
- package/dist/openai.js +475 -0
- package/dist/openai.js.map +1 -0
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// JSX Component
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { Model } from "@agentick/core/jsx";
|
|
5
|
+
import { createElement } from "@agentick/core/jsx-runtime";
|
|
6
|
+
import { createOpenAIModel } from "./openai";
|
|
7
|
+
import {} from "./types";
|
|
8
|
+
/**
|
|
9
|
+
* OpenAIModel component for declarative model configuration in JSX.
|
|
10
|
+
*
|
|
11
|
+
* Creates an OpenAI model adapter internally and wraps it in a Model component.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* // Basic usage
|
|
16
|
+
* <OpenAIModel model="gpt-4o" />
|
|
17
|
+
*
|
|
18
|
+
* // With config
|
|
19
|
+
* <OpenAIModel
|
|
20
|
+
* model="gpt-4o"
|
|
21
|
+
* temperature={0.7}
|
|
22
|
+
* maxTokens={1000}
|
|
23
|
+
* />
|
|
24
|
+
*
|
|
25
|
+
* // With custom base URL (e.g., Azure OpenAI)
|
|
26
|
+
* <OpenAIModel
|
|
27
|
+
* model="gpt-4"
|
|
28
|
+
* baseURL="https://my-resource.openai.azure.com"
|
|
29
|
+
* apiKey={process.env.AZURE_OPENAI_KEY}
|
|
30
|
+
* />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function OpenAIModel(props) {
|
|
34
|
+
const { onMount, onUnmount, ...adapterConfig } = props;
|
|
35
|
+
const adapter = createOpenAIModel(adapterConfig);
|
|
36
|
+
return createElement(Model, { model: adapter, onMount, onUnmount });
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=openai-model.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-model.jsx","sourceRoot":"","sources":["../src/openai-model.tsx"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,OAAO,EAA4B,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAA4B,MAAM,SAAS,CAAC;AAanD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,EAAE,GAAG,KAAK,CAAC;IACvD,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACjD,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AACtE,CAAC"}
|
package/dist/openai.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Adapter
|
|
3
|
+
*
|
|
4
|
+
* Native OpenAI API adapter for use with the engine.
|
|
5
|
+
* Uses createAdapter for minimal boilerplate.
|
|
6
|
+
*/
|
|
7
|
+
import { type ClientOptions } from "openai";
|
|
8
|
+
import type { ChatCompletionMessageParam, ChatCompletionTool } from "openai/resources/chat/completions";
|
|
9
|
+
import { type ModelClass } from "@agentick/core/model";
|
|
10
|
+
import { type Message } from "@agentick/shared";
|
|
11
|
+
import { type OpenAIAdapterConfig } from "./types";
|
|
12
|
+
/**
|
|
13
|
+
* Factory function for creating OpenAI model adapter.
|
|
14
|
+
*
|
|
15
|
+
* Returns a ModelClass that can be used both programmatically and as JSX.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createOpenAIModel(config?: OpenAIAdapterConfig): ModelClass;
|
|
18
|
+
/**
|
|
19
|
+
* Convenience factory for creating OpenAI model.
|
|
20
|
+
*
|
|
21
|
+
* Returns a ModelClass that can be used as:
|
|
22
|
+
* - JSX component: `<model temperature={0.9}><Agent /></model>`
|
|
23
|
+
* - App config: `createApp(Agent, { model })`
|
|
24
|
+
* - Direct calls: `await model.generate(input)`
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const model = openai({ model: 'gpt-4o' });
|
|
29
|
+
*
|
|
30
|
+
* // As JSX
|
|
31
|
+
* <model><MyAgent /></model>
|
|
32
|
+
*
|
|
33
|
+
* // With createApp
|
|
34
|
+
* const app = createApp(MyAgent, { model });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function openai(config?: OpenAIAdapterConfig): ModelClass;
|
|
38
|
+
export declare function buildClientOptions(config: OpenAIAdapterConfig): ClientOptions;
|
|
39
|
+
/**
|
|
40
|
+
* Convert Message to OpenAI ChatCompletionMessageParam(s)
|
|
41
|
+
*/
|
|
42
|
+
export declare function toOpenAIMessages(message: Message): ChatCompletionMessageParam[];
|
|
43
|
+
/**
|
|
44
|
+
* Map tool definition to OpenAI format
|
|
45
|
+
*/
|
|
46
|
+
export declare function mapToolDefinition(tool: any): ChatCompletionTool;
|
|
47
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAGV,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAGL,KAAK,UAAU,EAGhB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,KAAK,OAAO,EAKb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,mBAAmB,EAAmB,MAAM,SAAS,CAAC;AAQpE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,mBAAwB,GAAG,UAAU,CAgV9E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAE/D;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAgB7E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,EAAE,CA8E/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,kBAAkB,CA+C/D"}
|
package/dist/openai.js
ADDED
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Adapter
|
|
3
|
+
*
|
|
4
|
+
* Native OpenAI API adapter for use with the engine.
|
|
5
|
+
* Uses createAdapter for minimal boilerplate.
|
|
6
|
+
*/
|
|
7
|
+
import { OpenAI } from "openai";
|
|
8
|
+
import { createAdapter, } from "@agentick/core/model";
|
|
9
|
+
// import { Logger } from "@agentick/core";
|
|
10
|
+
import { normalizeModelInput } from "@agentick/core/utils";
|
|
11
|
+
import { StopReason, AdapterError, } from "@agentick/shared";
|
|
12
|
+
import { STOP_REASON_MAP } from "./types";
|
|
13
|
+
// const logger = Logger.for("OpenAIAdapter");
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Factory Function
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Factory function for creating OpenAI model adapter.
|
|
19
|
+
*
|
|
20
|
+
* Returns a ModelClass that can be used both programmatically and as JSX.
|
|
21
|
+
*/
|
|
22
|
+
export function createOpenAIModel(config = {}) {
|
|
23
|
+
const client = config.client ?? new OpenAI(buildClientOptions(config));
|
|
24
|
+
// Stateful tracking of tool call IDs by index (reset per stream)
|
|
25
|
+
// OpenAI only sends the id on the first chunk, subsequent chunks only have index
|
|
26
|
+
let toolCallIdByIndex = new Map();
|
|
27
|
+
return createAdapter({
|
|
28
|
+
metadata: {
|
|
29
|
+
id: "openai",
|
|
30
|
+
provider: "openai",
|
|
31
|
+
model: config.model,
|
|
32
|
+
type: "language",
|
|
33
|
+
capabilities: [
|
|
34
|
+
{ stream: true, toolCalls: true, provider: "openai" },
|
|
35
|
+
{
|
|
36
|
+
messageTransformation: (modelId, _provider) => {
|
|
37
|
+
const isGPT4 = modelId.includes("gpt-4") || modelId.includes("o1");
|
|
38
|
+
const supportsDeveloper = isGPT4;
|
|
39
|
+
return {
|
|
40
|
+
preferredRenderer: "markdown",
|
|
41
|
+
roleMapping: {
|
|
42
|
+
event: supportsDeveloper ? "developer" : "user",
|
|
43
|
+
ephemeral: supportsDeveloper ? "developer" : "user",
|
|
44
|
+
},
|
|
45
|
+
delimiters: {
|
|
46
|
+
useDelimiters: !supportsDeveloper,
|
|
47
|
+
event: "[Event]",
|
|
48
|
+
ephemeral: "[Context]",
|
|
49
|
+
},
|
|
50
|
+
ephemeralPosition: "flow",
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
prepareInput: async (input) => {
|
|
57
|
+
const normalizedInput = normalizeModelInput(input, config);
|
|
58
|
+
const messages = [];
|
|
59
|
+
for (const message of normalizedInput.messages) {
|
|
60
|
+
messages.push(...toOpenAIMessages(message));
|
|
61
|
+
}
|
|
62
|
+
const openAITools = normalizedInput.tools.length > 0
|
|
63
|
+
? normalizedInput.tools.map((tool) => mapToolDefinition(tool.metadata))
|
|
64
|
+
: undefined;
|
|
65
|
+
const baseParams = {
|
|
66
|
+
model: normalizedInput.model,
|
|
67
|
+
messages,
|
|
68
|
+
temperature: normalizedInput.temperature,
|
|
69
|
+
max_tokens: normalizedInput.maxTokens,
|
|
70
|
+
top_p: normalizedInput.topP,
|
|
71
|
+
frequency_penalty: normalizedInput.frequencyPenalty,
|
|
72
|
+
presence_penalty: normalizedInput.presencePenalty,
|
|
73
|
+
stop: normalizedInput.stop,
|
|
74
|
+
tools: openAITools && openAITools.length > 0 ? openAITools : undefined,
|
|
75
|
+
tool_choice: openAITools && openAITools.length > 0 ? "auto" : undefined,
|
|
76
|
+
};
|
|
77
|
+
// Map responseFormat
|
|
78
|
+
if (normalizedInput.responseFormat) {
|
|
79
|
+
const rf = normalizedInput.responseFormat;
|
|
80
|
+
if (rf.type === "text") {
|
|
81
|
+
baseParams.response_format = { type: "text" };
|
|
82
|
+
}
|
|
83
|
+
else if (rf.type === "json") {
|
|
84
|
+
baseParams.response_format = { type: "json_object" };
|
|
85
|
+
}
|
|
86
|
+
else if (rf.type === "json_schema") {
|
|
87
|
+
baseParams.response_format = {
|
|
88
|
+
type: "json_schema",
|
|
89
|
+
json_schema: {
|
|
90
|
+
name: rf.name ?? "response",
|
|
91
|
+
schema: rf.schema,
|
|
92
|
+
strict: true,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Clean undefined values
|
|
98
|
+
Object.keys(baseParams).forEach((key) => {
|
|
99
|
+
if (baseParams[key] === undefined) {
|
|
100
|
+
delete baseParams[key];
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
// providerOptions.openai spreads AFTER for user override
|
|
104
|
+
if (normalizedInput.providerOptions?.openai) {
|
|
105
|
+
return { ...baseParams, ...normalizedInput.providerOptions.openai };
|
|
106
|
+
}
|
|
107
|
+
return baseParams;
|
|
108
|
+
},
|
|
109
|
+
mapChunk: (chunk) => {
|
|
110
|
+
// Usage-only chunks (no choices) - emit usage event, not message_end
|
|
111
|
+
// OpenAI sends usage in a separate final chunk after finish_reason
|
|
112
|
+
if (!chunk.choices || chunk.choices.length === 0) {
|
|
113
|
+
if (chunk.usage) {
|
|
114
|
+
// Emit usage event (not message_end) to avoid duplicate end events
|
|
115
|
+
return {
|
|
116
|
+
type: "usage",
|
|
117
|
+
usage: {
|
|
118
|
+
inputTokens: chunk.usage.prompt_tokens ?? 0,
|
|
119
|
+
outputTokens: chunk.usage.completion_tokens ?? 0,
|
|
120
|
+
totalTokens: chunk.usage.total_tokens ?? 0,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
const choice = chunk.choices[0];
|
|
127
|
+
if (!choice || !choice.delta) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
const delta = choice.delta;
|
|
131
|
+
// Check finish_reason FIRST - the final chunk has both finish_reason and empty content
|
|
132
|
+
if (choice.finish_reason) {
|
|
133
|
+
return {
|
|
134
|
+
type: "message_end",
|
|
135
|
+
stopReason: STOP_REASON_MAP[choice.finish_reason] ?? StopReason.OTHER,
|
|
136
|
+
usage: chunk.usage
|
|
137
|
+
? {
|
|
138
|
+
inputTokens: chunk.usage.prompt_tokens ?? 0,
|
|
139
|
+
outputTokens: chunk.usage.completion_tokens ?? 0,
|
|
140
|
+
totalTokens: chunk.usage.total_tokens ?? 0,
|
|
141
|
+
}
|
|
142
|
+
: undefined,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// Text content - only emit if non-empty (empty deltas are noise)
|
|
146
|
+
if (delta.content) {
|
|
147
|
+
return { type: "text", delta: delta.content };
|
|
148
|
+
}
|
|
149
|
+
// Tool calls
|
|
150
|
+
if (delta.tool_calls) {
|
|
151
|
+
for (const toolCall of delta.tool_calls) {
|
|
152
|
+
const index = toolCall.index;
|
|
153
|
+
// Track id by index (OpenAI only sends id on first chunk)
|
|
154
|
+
if (toolCall.id) {
|
|
155
|
+
toolCallIdByIndex.set(index, toolCall.id);
|
|
156
|
+
}
|
|
157
|
+
// Get the tracked id for this tool call
|
|
158
|
+
const id = toolCallIdByIndex.get(index) || "";
|
|
159
|
+
if (toolCall.function) {
|
|
160
|
+
// Tool call start (has name)
|
|
161
|
+
if (toolCall.function.name) {
|
|
162
|
+
return {
|
|
163
|
+
type: "tool_call_start",
|
|
164
|
+
id,
|
|
165
|
+
name: toolCall.function.name,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// Tool call delta (has arguments)
|
|
169
|
+
if (toolCall.function.arguments) {
|
|
170
|
+
return {
|
|
171
|
+
type: "tool_call_delta",
|
|
172
|
+
id,
|
|
173
|
+
delta: toolCall.function.arguments,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
},
|
|
181
|
+
processOutput: async (output) => {
|
|
182
|
+
const choice = output.choices?.[0];
|
|
183
|
+
const openaiMessage = choice?.message;
|
|
184
|
+
if (!openaiMessage) {
|
|
185
|
+
throw new AdapterError("openai", "No message in OpenAI response", "ADAPTER_RESPONSE");
|
|
186
|
+
}
|
|
187
|
+
const content = [];
|
|
188
|
+
if (openaiMessage.content) {
|
|
189
|
+
content.push({ type: "text", text: openaiMessage.content });
|
|
190
|
+
}
|
|
191
|
+
const toolCalls = [];
|
|
192
|
+
if (openaiMessage.tool_calls) {
|
|
193
|
+
for (const toolCall of openaiMessage.tool_calls) {
|
|
194
|
+
if (toolCall.type === "function" && "function" in toolCall) {
|
|
195
|
+
let parsedInput;
|
|
196
|
+
try {
|
|
197
|
+
parsedInput = JSON.parse(toolCall.function.arguments);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
parsedInput = toolCall.function.arguments;
|
|
201
|
+
}
|
|
202
|
+
toolCalls.push({
|
|
203
|
+
id: toolCall.id,
|
|
204
|
+
name: toolCall.function.name,
|
|
205
|
+
input: parsedInput,
|
|
206
|
+
});
|
|
207
|
+
content.push({
|
|
208
|
+
type: "tool_use",
|
|
209
|
+
toolUseId: toolCall.id,
|
|
210
|
+
name: toolCall.function.name,
|
|
211
|
+
input: parsedInput,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const messages = [{ role: "assistant", content }];
|
|
217
|
+
return {
|
|
218
|
+
model: output.model,
|
|
219
|
+
createdAt: output.created.toString(),
|
|
220
|
+
messages,
|
|
221
|
+
get message() {
|
|
222
|
+
return messages.filter((m) => m.role === "assistant").at(-1);
|
|
223
|
+
},
|
|
224
|
+
stopReason: choice?.finish_reason
|
|
225
|
+
? (STOP_REASON_MAP[choice.finish_reason] ?? StopReason.OTHER)
|
|
226
|
+
: StopReason.UNSPECIFIED,
|
|
227
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
228
|
+
usage: {
|
|
229
|
+
inputTokens: output.usage?.prompt_tokens ?? 0,
|
|
230
|
+
outputTokens: output.usage?.completion_tokens ?? 0,
|
|
231
|
+
totalTokens: output.usage?.total_tokens ?? 0,
|
|
232
|
+
reasoningTokens: 0,
|
|
233
|
+
cachedInputTokens: output.usage?.prompt_tokens_details?.cached_tokens ?? 0,
|
|
234
|
+
},
|
|
235
|
+
raw: output,
|
|
236
|
+
};
|
|
237
|
+
},
|
|
238
|
+
execute: async (params) => {
|
|
239
|
+
return await client.chat.completions.create({
|
|
240
|
+
...params,
|
|
241
|
+
stream: false,
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
executeStream: async function* (params) {
|
|
245
|
+
// Reset tool call tracking for new stream
|
|
246
|
+
toolCallIdByIndex = new Map();
|
|
247
|
+
const stream = await client.chat.completions.create({
|
|
248
|
+
...params,
|
|
249
|
+
stream: true,
|
|
250
|
+
stream_options: { include_usage: true },
|
|
251
|
+
});
|
|
252
|
+
for await (const chunk of stream) {
|
|
253
|
+
yield chunk;
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
reconstructRaw: (accumulated) => {
|
|
257
|
+
// Reconstruct a ChatCompletion-like response from streaming data
|
|
258
|
+
// This allows consumers to treat the streaming response as if it were non-streaming
|
|
259
|
+
const chunks = accumulated.chunks;
|
|
260
|
+
const firstChunk = chunks[0];
|
|
261
|
+
// Map internal stop reason to OpenAI finish_reason
|
|
262
|
+
const finishReason = (() => {
|
|
263
|
+
switch (accumulated.stopReason) {
|
|
264
|
+
case StopReason.STOP:
|
|
265
|
+
return "stop";
|
|
266
|
+
case StopReason.MAX_TOKENS:
|
|
267
|
+
return "length";
|
|
268
|
+
case StopReason.TOOL_USE:
|
|
269
|
+
return "tool_calls";
|
|
270
|
+
case StopReason.CONTENT_FILTER:
|
|
271
|
+
return "content_filter";
|
|
272
|
+
default:
|
|
273
|
+
return "stop";
|
|
274
|
+
}
|
|
275
|
+
})();
|
|
276
|
+
// Build tool_calls array if present
|
|
277
|
+
const toolCalls = accumulated.toolCalls.length > 0
|
|
278
|
+
? accumulated.toolCalls.map((tc, _index) => ({
|
|
279
|
+
id: tc.id,
|
|
280
|
+
type: "function",
|
|
281
|
+
function: {
|
|
282
|
+
name: tc.name,
|
|
283
|
+
arguments: JSON.stringify(tc.input),
|
|
284
|
+
},
|
|
285
|
+
}))
|
|
286
|
+
: undefined;
|
|
287
|
+
// Reconstruct the ChatCompletion format
|
|
288
|
+
const reconstructed = {
|
|
289
|
+
id: firstChunk?.id || `chatcmpl-${Date.now()}`,
|
|
290
|
+
object: "chat.completion",
|
|
291
|
+
created: firstChunk?.created || Math.floor(Date.now() / 1000),
|
|
292
|
+
model: accumulated.model,
|
|
293
|
+
choices: [
|
|
294
|
+
{
|
|
295
|
+
index: 0,
|
|
296
|
+
message: {
|
|
297
|
+
role: "assistant",
|
|
298
|
+
content: accumulated.text || null,
|
|
299
|
+
refusal: null,
|
|
300
|
+
...(toolCalls ? { tool_calls: toolCalls } : {}),
|
|
301
|
+
},
|
|
302
|
+
finish_reason: finishReason,
|
|
303
|
+
logprobs: null,
|
|
304
|
+
},
|
|
305
|
+
],
|
|
306
|
+
usage: {
|
|
307
|
+
prompt_tokens: accumulated.usage.inputTokens,
|
|
308
|
+
completion_tokens: accumulated.usage.outputTokens,
|
|
309
|
+
total_tokens: accumulated.usage.totalTokens,
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
return reconstructed;
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Convenience factory for creating OpenAI model.
|
|
318
|
+
*
|
|
319
|
+
* Returns a ModelClass that can be used as:
|
|
320
|
+
* - JSX component: `<model temperature={0.9}><Agent /></model>`
|
|
321
|
+
* - App config: `createApp(Agent, { model })`
|
|
322
|
+
* - Direct calls: `await model.generate(input)`
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```typescript
|
|
326
|
+
* const model = openai({ model: 'gpt-4o' });
|
|
327
|
+
*
|
|
328
|
+
* // As JSX
|
|
329
|
+
* <model><MyAgent /></model>
|
|
330
|
+
*
|
|
331
|
+
* // With createApp
|
|
332
|
+
* const app = createApp(MyAgent, { model });
|
|
333
|
+
* ```
|
|
334
|
+
*/
|
|
335
|
+
export function openai(config) {
|
|
336
|
+
return createOpenAIModel(config);
|
|
337
|
+
}
|
|
338
|
+
// ============================================================================
|
|
339
|
+
// Helper Functions
|
|
340
|
+
// ============================================================================
|
|
341
|
+
export function buildClientOptions(config) {
|
|
342
|
+
const options = {
|
|
343
|
+
apiKey: config.apiKey ?? process.env["OPENAI_API_KEY"],
|
|
344
|
+
baseURL: config.baseURL ?? process.env["OPENAI_BASE_URL"],
|
|
345
|
+
organization: config.organization ?? process.env["OPENAI_ORGANIZATION"],
|
|
346
|
+
defaultHeaders: config.headers,
|
|
347
|
+
...(config.providerOptions?.openai || {}),
|
|
348
|
+
};
|
|
349
|
+
Object.keys(options).forEach((key) => {
|
|
350
|
+
if (options[key] === undefined) {
|
|
351
|
+
delete options[key];
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
return options;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Convert Message to OpenAI ChatCompletionMessageParam(s)
|
|
358
|
+
*/
|
|
359
|
+
export function toOpenAIMessages(message) {
|
|
360
|
+
const content = [];
|
|
361
|
+
const tool_calls = [];
|
|
362
|
+
const toolResultMessages = [];
|
|
363
|
+
for (const block of message.content) {
|
|
364
|
+
switch (block.type) {
|
|
365
|
+
case "text":
|
|
366
|
+
content.push({ type: "text", text: block.text });
|
|
367
|
+
break;
|
|
368
|
+
case "image":
|
|
369
|
+
if (block.source.type === "url") {
|
|
370
|
+
content.push({
|
|
371
|
+
type: "image_url",
|
|
372
|
+
image_url: { url: block.source.url },
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
else if (block.source.type === "base64") {
|
|
376
|
+
content.push({
|
|
377
|
+
type: "image_url",
|
|
378
|
+
image_url: {
|
|
379
|
+
url: `data:${block.source.mimeType};base64,${block.source.data}`,
|
|
380
|
+
},
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
break;
|
|
384
|
+
case "tool_use":
|
|
385
|
+
tool_calls.push({
|
|
386
|
+
id: block.toolUseId,
|
|
387
|
+
type: "function",
|
|
388
|
+
function: {
|
|
389
|
+
name: block.name,
|
|
390
|
+
arguments: JSON.stringify(block.input),
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
break;
|
|
394
|
+
case "tool_result":
|
|
395
|
+
const resultContent = block.content || [];
|
|
396
|
+
const resultText = resultContent
|
|
397
|
+
.filter((c) => c.type === "text")
|
|
398
|
+
.map((c) => c.text)
|
|
399
|
+
.join("\n");
|
|
400
|
+
toolResultMessages.push({
|
|
401
|
+
role: "tool",
|
|
402
|
+
tool_call_id: block.toolUseId,
|
|
403
|
+
content: resultText || "Done",
|
|
404
|
+
});
|
|
405
|
+
break;
|
|
406
|
+
default:
|
|
407
|
+
const blockText = block.text || JSON.stringify(block, null, 2);
|
|
408
|
+
content.push({ type: "text", text: blockText });
|
|
409
|
+
break;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (toolResultMessages.length > 0 && content.length === 0 && tool_calls.length === 0) {
|
|
413
|
+
return toolResultMessages;
|
|
414
|
+
}
|
|
415
|
+
const baseMessage = {
|
|
416
|
+
role: message.role,
|
|
417
|
+
content: content.length > 0 ? content : null,
|
|
418
|
+
};
|
|
419
|
+
if (tool_calls.length > 0) {
|
|
420
|
+
baseMessage.tool_calls = tool_calls;
|
|
421
|
+
}
|
|
422
|
+
const result = [baseMessage];
|
|
423
|
+
if (toolResultMessages.length > 0) {
|
|
424
|
+
result.push(...toolResultMessages);
|
|
425
|
+
}
|
|
426
|
+
return result;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Map tool definition to OpenAI format
|
|
430
|
+
*/
|
|
431
|
+
export function mapToolDefinition(tool) {
|
|
432
|
+
if (typeof tool === "string") {
|
|
433
|
+
return {
|
|
434
|
+
type: "function",
|
|
435
|
+
function: {
|
|
436
|
+
name: tool,
|
|
437
|
+
description: "",
|
|
438
|
+
parameters: {},
|
|
439
|
+
},
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
if ("name" in tool && "input" in tool) {
|
|
443
|
+
const toolDef = tool;
|
|
444
|
+
const baseTool = {
|
|
445
|
+
type: "function",
|
|
446
|
+
function: {
|
|
447
|
+
name: toolDef.name,
|
|
448
|
+
description: toolDef.description || "",
|
|
449
|
+
parameters: toolDef.input || {},
|
|
450
|
+
},
|
|
451
|
+
};
|
|
452
|
+
if (toolDef.providerOptions?.openai) {
|
|
453
|
+
const openAIConfig = toolDef.providerOptions.openai;
|
|
454
|
+
return {
|
|
455
|
+
...baseTool,
|
|
456
|
+
...openAIConfig,
|
|
457
|
+
function: {
|
|
458
|
+
...baseTool.function,
|
|
459
|
+
...(openAIConfig.function || {}),
|
|
460
|
+
},
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
return baseTool;
|
|
464
|
+
}
|
|
465
|
+
const metadata = tool.metadata || tool;
|
|
466
|
+
return {
|
|
467
|
+
type: "function",
|
|
468
|
+
function: {
|
|
469
|
+
name: metadata?.id || metadata?.name || "unknown",
|
|
470
|
+
description: metadata?.description || "",
|
|
471
|
+
parameters: metadata?.inputSchema || {},
|
|
472
|
+
},
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { OpenAI } from "openai";
|
|
2
|
+
import { type ClientOptions } from "openai";
|
|
3
|
+
import { type ProviderClientOptions } from "@agentick/core";
|
|
4
|
+
import { StopReason } from "@agentick/shared";
|
|
5
|
+
/**
|
|
6
|
+
* OpenAI adapter configuration.
|
|
7
|
+
* Used when creating the OpenAI adapter instance.
|
|
8
|
+
*/
|
|
9
|
+
export interface OpenAIAdapterConfig extends ClientOptions {
|
|
10
|
+
model?: string;
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
baseURL?: string;
|
|
13
|
+
organization?: string;
|
|
14
|
+
project?: string;
|
|
15
|
+
headers?: Record<string, string>;
|
|
16
|
+
timeout?: number;
|
|
17
|
+
maxRetries?: number;
|
|
18
|
+
client?: OpenAI;
|
|
19
|
+
providerOptions?: ProviderClientOptions;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* OpenAI-specific generation options.
|
|
24
|
+
* Used for chat completion calls and other operations.
|
|
25
|
+
* Extends OpenAI's ChatCompletionCreateParams to allow provider-specific overrides.
|
|
26
|
+
*/
|
|
27
|
+
export type OpenAIGenerationOptions = Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams> & {
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* OpenAI-specific tool options.
|
|
32
|
+
* Can override or extend the base OpenAI tool definition.
|
|
33
|
+
*/
|
|
34
|
+
export interface OpenAIToolOptions {
|
|
35
|
+
type?: "function" | "code_interpreter" | "file_search";
|
|
36
|
+
function?: {
|
|
37
|
+
name?: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
parameters?: Record<string, unknown>;
|
|
40
|
+
[key: string]: unknown;
|
|
41
|
+
};
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Module augmentation: Extend provider option interfaces to include OpenAI-specific options.
|
|
46
|
+
*/
|
|
47
|
+
declare module "@agentick/core" {
|
|
48
|
+
interface ProviderClientOptions {
|
|
49
|
+
openai?: OpenAIAdapterConfig;
|
|
50
|
+
}
|
|
51
|
+
interface ProviderGenerationOptions {
|
|
52
|
+
openai?: OpenAIGenerationOptions;
|
|
53
|
+
}
|
|
54
|
+
interface ProviderToolOptions {
|
|
55
|
+
openai?: OpenAIToolOptions;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export declare const STOP_REASON_MAP: Record<string, StopReason>;
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GACjC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,GAAG;IAC5D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEJ;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,kBAAkB,GAAG,aAAa,CAAC;IACvD,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,qBAAqB;QAC7B,MAAM,CAAC,EAAE,mBAAmB,CAAC;KAC9B;IAED,UAAU,yBAAyB;QACjC,MAAM,CAAC,EAAE,uBAAuB,CAAC;KAClC;IAED,UAAU,mBAAmB;QAC3B,MAAM,CAAC,EAAE,iBAAiB,CAAC;KAC5B;CACF;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAMtD,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {} from "openai";
|
|
2
|
+
import {} from "@agentick/core";
|
|
3
|
+
import { StopReason } from "@agentick/shared";
|
|
4
|
+
export const STOP_REASON_MAP = {
|
|
5
|
+
stop: StopReason.STOP,
|
|
6
|
+
length: StopReason.MAX_TOKENS,
|
|
7
|
+
content_filter: StopReason.CONTENT_FILTER,
|
|
8
|
+
tool_calls: StopReason.TOOL_USE,
|
|
9
|
+
function_call: StopReason.FUNCTION_CALL,
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAA8B,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA8D9C,MAAM,CAAC,MAAM,eAAe,GAA+B;IACzD,IAAI,EAAE,UAAU,CAAC,IAAI;IACrB,MAAM,EAAE,UAAU,CAAC,UAAU;IAC7B,cAAc,EAAE,UAAU,CAAC,cAAc;IACzC,UAAU,EAAE,UAAU,CAAC,QAAQ;IAC/B,aAAa,EAAE,UAAU,CAAC,aAAa;CACxC,CAAC"}
|