@mcp-abap-adt/openai-llm 11.0.0
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 +9 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/openai-provider.d.ts +34 -0
- package/dist/openai-provider.d.ts.map +1 -0
- package/dist/openai-provider.js +193 -0
- package/dist/openai-provider.js.map +1 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# @mcp-abap-adt/openai-llm
|
|
2
|
+
|
|
3
|
+
OpenAI LLM provider for `@mcp-abap-adt/llm-agent` / `@mcp-abap-adt/llm-agent-server`.
|
|
4
|
+
|
|
5
|
+
Exports:
|
|
6
|
+
- `OpenAIProvider` — implements ILlm, calls OpenAI /v1/chat/completions.
|
|
7
|
+
- `OpenAIConfig` — configuration type.
|
|
8
|
+
|
|
9
|
+
Optional peer dependency of `@mcp-abap-adt/llm-agent-server`. Install when your smart-server.yaml names `openai` as the LLM provider, or when constructing OpenAIProvider programmatically.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI LLM Provider
|
|
3
|
+
*/
|
|
4
|
+
import type { IModelInfo, LLMCallOptions, LLMProviderConfig, LLMResponse, Message } from '@mcp-abap-adt/llm-agent';
|
|
5
|
+
import { BaseLLMProvider } from '@mcp-abap-adt/llm-agent';
|
|
6
|
+
import { type AxiosInstance } from 'axios';
|
|
7
|
+
export interface OpenAIConfig extends LLMProviderConfig {
|
|
8
|
+
model?: string;
|
|
9
|
+
temperature?: number;
|
|
10
|
+
maxTokens?: number;
|
|
11
|
+
organization?: string;
|
|
12
|
+
project?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class OpenAIProvider extends BaseLLMProvider<OpenAIConfig> {
|
|
15
|
+
readonly client: AxiosInstance;
|
|
16
|
+
readonly model: string;
|
|
17
|
+
protected readonly providerName: string;
|
|
18
|
+
constructor(config: OpenAIConfig);
|
|
19
|
+
chat(messages: Message[], tools?: unknown[], options?: LLMCallOptions): Promise<LLMResponse>;
|
|
20
|
+
streamChat(messages: Message[], tools?: unknown[], options?: LLMCallOptions): AsyncIterable<LLMResponse>;
|
|
21
|
+
getModels(): Promise<IModelInfo[]>;
|
|
22
|
+
getEmbeddingModels(): Promise<IModelInfo[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Return the appropriate token limit parameter for the model.
|
|
25
|
+
* Newer models (o1, o3, gpt-5+) require max_completion_tokens;
|
|
26
|
+
* legacy models use max_tokens.
|
|
27
|
+
*/
|
|
28
|
+
protected getTokenLimitParam(model: string, maxTokens: number): Record<string, number>;
|
|
29
|
+
/**
|
|
30
|
+
* Format messages for OpenAI API with strict protocol enforcement.
|
|
31
|
+
*/
|
|
32
|
+
protected formatMessages(messages: Message[]): Array<Record<string, unknown>>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=openai-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../src/openai-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,OAAO,EACR,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAElD,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,eAAe,CAAC,YAAY,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAY;gBAEvC,MAAM,EAAE,YAAY;IA2B1B,IAAI,CACR,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC;IA6ChB,UAAU,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,aAAa,CAAC,WAAW,CAAC;IA6EvB,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAOlC,kBAAkB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAOjD;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQzB;;OAEG;IACH,SAAS,CAAC,cAAc,CACtB,QAAQ,EAAE,OAAO,EAAE,GAClB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAmClC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI LLM Provider
|
|
3
|
+
*/
|
|
4
|
+
import { BaseLLMProvider } from '@mcp-abap-adt/llm-agent';
|
|
5
|
+
import axios from 'axios';
|
|
6
|
+
export class OpenAIProvider extends BaseLLMProvider {
|
|
7
|
+
client;
|
|
8
|
+
model;
|
|
9
|
+
providerName = 'OpenAI';
|
|
10
|
+
constructor(config) {
|
|
11
|
+
super(config);
|
|
12
|
+
this.validateConfig();
|
|
13
|
+
this.model = config.model || 'gpt-4o-mini';
|
|
14
|
+
const headers = {
|
|
15
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
};
|
|
18
|
+
// Add organization header if provided
|
|
19
|
+
if (config.organization) {
|
|
20
|
+
headers['OpenAI-Organization'] = config.organization;
|
|
21
|
+
}
|
|
22
|
+
// Add project header if provided
|
|
23
|
+
if (config.project) {
|
|
24
|
+
headers['OpenAI-Project'] = config.project;
|
|
25
|
+
}
|
|
26
|
+
this.client = axios.create({
|
|
27
|
+
baseURL: config.baseURL || 'https://api.openai.com/v1',
|
|
28
|
+
headers,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async chat(messages, tools, options) {
|
|
32
|
+
try {
|
|
33
|
+
const model = options?.model ?? this.model;
|
|
34
|
+
const temperature = options?.temperature ?? this.config.temperature ?? 0.7;
|
|
35
|
+
const maxTokens = options?.maxTokens ?? this.config.maxTokens ?? 4096;
|
|
36
|
+
const response = await this.client.post('/chat/completions', {
|
|
37
|
+
model,
|
|
38
|
+
messages: this.formatMessages(messages),
|
|
39
|
+
tools: tools && tools.length > 0 ? tools : undefined,
|
|
40
|
+
tool_choice: tools && tools.length > 0 ? 'auto' : undefined,
|
|
41
|
+
temperature,
|
|
42
|
+
...this.getTokenLimitParam(model, maxTokens),
|
|
43
|
+
...(options?.topP !== undefined ? { top_p: options.topP } : {}),
|
|
44
|
+
...(options?.stop ? { stop: options.stop } : {}),
|
|
45
|
+
});
|
|
46
|
+
const choice = response.data.choices[0];
|
|
47
|
+
const usage = response.data.usage
|
|
48
|
+
? {
|
|
49
|
+
prompt_tokens: response.data.usage.prompt_tokens,
|
|
50
|
+
completion_tokens: response.data.usage.completion_tokens,
|
|
51
|
+
total_tokens: response.data.usage.total_tokens,
|
|
52
|
+
}
|
|
53
|
+
: undefined;
|
|
54
|
+
return {
|
|
55
|
+
content: choice.message.content || '',
|
|
56
|
+
finishReason: choice.finish_reason,
|
|
57
|
+
raw: response.data,
|
|
58
|
+
usage,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const message = axios.isAxiosError(error)
|
|
63
|
+
? error.response?.data?.error
|
|
64
|
+
?.message || error.message
|
|
65
|
+
: error instanceof Error
|
|
66
|
+
? error.message
|
|
67
|
+
: String(error);
|
|
68
|
+
throw new Error(`${this.providerName} API error: ${message}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async *streamChat(messages, tools, options) {
|
|
72
|
+
try {
|
|
73
|
+
const model = options?.model ?? this.model;
|
|
74
|
+
const temperature = options?.temperature ?? this.config.temperature ?? 0.7;
|
|
75
|
+
const maxTokens = options?.maxTokens ?? this.config.maxTokens ?? 4096;
|
|
76
|
+
const response = await this.client.post('/chat/completions', {
|
|
77
|
+
model,
|
|
78
|
+
messages: this.formatMessages(messages),
|
|
79
|
+
tools: tools && tools.length > 0 ? tools : undefined,
|
|
80
|
+
tool_choice: tools && tools.length > 0 ? 'auto' : undefined,
|
|
81
|
+
temperature,
|
|
82
|
+
...this.getTokenLimitParam(model, maxTokens),
|
|
83
|
+
...(options?.topP !== undefined ? { top_p: options.topP } : {}),
|
|
84
|
+
...(options?.stop ? { stop: options.stop } : {}),
|
|
85
|
+
stream: true,
|
|
86
|
+
stream_options: { include_usage: true },
|
|
87
|
+
}, { responseType: 'stream' });
|
|
88
|
+
const stream = response.data;
|
|
89
|
+
let buffer = '';
|
|
90
|
+
for await (const chunk of stream) {
|
|
91
|
+
buffer += chunk.toString();
|
|
92
|
+
const lines = buffer.split('\n');
|
|
93
|
+
buffer = lines.pop() || '';
|
|
94
|
+
for (const line of lines) {
|
|
95
|
+
const trimmed = line.trim();
|
|
96
|
+
if (!trimmed?.startsWith('data: '))
|
|
97
|
+
continue;
|
|
98
|
+
const data = trimmed.slice(6);
|
|
99
|
+
if (data === '[DONE]')
|
|
100
|
+
break;
|
|
101
|
+
try {
|
|
102
|
+
const parsed = JSON.parse(data);
|
|
103
|
+
const choice = parsed.choices?.[0];
|
|
104
|
+
if (choice?.delta) {
|
|
105
|
+
yield {
|
|
106
|
+
content: choice.delta.content || '',
|
|
107
|
+
finishReason: choice.finish_reason,
|
|
108
|
+
raw: parsed,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Usage-only chunk (stream_options: include_usage)
|
|
112
|
+
if (parsed.usage && !choice?.delta) {
|
|
113
|
+
yield {
|
|
114
|
+
content: '',
|
|
115
|
+
raw: parsed,
|
|
116
|
+
usage: {
|
|
117
|
+
prompt_tokens: parsed.usage.prompt_tokens,
|
|
118
|
+
completion_tokens: parsed.usage.completion_tokens,
|
|
119
|
+
total_tokens: parsed.usage.total_tokens,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (_e) {
|
|
125
|
+
// Ignore parse errors for incomplete chunks
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const message = axios.isAxiosError(error)
|
|
132
|
+
? error.response?.data?.error
|
|
133
|
+
?.message || error.message
|
|
134
|
+
: error instanceof Error
|
|
135
|
+
? error.message
|
|
136
|
+
: String(error);
|
|
137
|
+
throw new Error(`${this.providerName} Streaming error: ${message}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async getModels() {
|
|
141
|
+
const response = await this.client.get('/models');
|
|
142
|
+
return response.data.data.map((m) => ({ id: m.id, owned_by: m.owned_by }));
|
|
143
|
+
}
|
|
144
|
+
async getEmbeddingModels() {
|
|
145
|
+
const response = await this.client.get('/models');
|
|
146
|
+
return response.data.data
|
|
147
|
+
.filter((m) => /embed/i.test(m.id))
|
|
148
|
+
.map((m) => ({ id: m.id, owned_by: m.owned_by }));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Return the appropriate token limit parameter for the model.
|
|
152
|
+
* Newer models (o1, o3, gpt-5+) require max_completion_tokens;
|
|
153
|
+
* legacy models use max_tokens.
|
|
154
|
+
*/
|
|
155
|
+
getTokenLimitParam(model, maxTokens) {
|
|
156
|
+
const normalized = model.toLowerCase();
|
|
157
|
+
const needsCompletionTokens = /^(o[13]|gpt-5)/.test(normalized);
|
|
158
|
+
return needsCompletionTokens
|
|
159
|
+
? { max_completion_tokens: maxTokens }
|
|
160
|
+
: { max_tokens: maxTokens };
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Format messages for OpenAI API with strict protocol enforcement.
|
|
164
|
+
*/
|
|
165
|
+
formatMessages(messages) {
|
|
166
|
+
const formatted = [];
|
|
167
|
+
for (const msg of messages) {
|
|
168
|
+
if (msg.role === 'tool' && !msg.tool_call_id) {
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const entry = {
|
|
172
|
+
role: msg.role,
|
|
173
|
+
content: msg.content ?? '',
|
|
174
|
+
};
|
|
175
|
+
if (msg.role === 'assistant' &&
|
|
176
|
+
msg.tool_calls &&
|
|
177
|
+
msg.tool_calls.length > 0) {
|
|
178
|
+
entry.tool_calls = msg.tool_calls;
|
|
179
|
+
entry.content = msg.content || null;
|
|
180
|
+
}
|
|
181
|
+
if (msg.role === 'tool') {
|
|
182
|
+
entry.tool_call_id = msg.tool_call_id;
|
|
183
|
+
entry.content =
|
|
184
|
+
typeof msg.content === 'string'
|
|
185
|
+
? msg.content
|
|
186
|
+
: JSON.stringify(msg.content ?? '');
|
|
187
|
+
}
|
|
188
|
+
formatted.push(entry);
|
|
189
|
+
}
|
|
190
|
+
return formatted;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=openai-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../src/openai-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mcp-abap-adt/openai-llm",
|
|
3
|
+
"version": "11.0.0",
|
|
4
|
+
"description": "OpenAI LLM provider (ILlm) for @mcp-abap-adt/llm-agent.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc -p tsconfig.json",
|
|
22
|
+
"clean": "tsc -p tsconfig.json --clean",
|
|
23
|
+
"test": "node --import tsx/esm --test --test-reporter=spec 'src/**/*.test.ts'"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@mcp-abap-adt/llm-agent": "*",
|
|
27
|
+
"axios": "^1.14.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^25.6.0"
|
|
31
|
+
},
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/fr0ster/llm-agent.git"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
}
|
|
40
|
+
}
|