Skip to content

Commit d54eec6

Browse files
authored
Merge pull request #646 from mindcraft-bots/uukelele-scratch-fix-custom-openai-endpoints
Fix custom OpenAI endpoints
2 parents e27d584 + b9070bd commit d54eec6

1 file changed

Lines changed: 40 additions & 11 deletions

File tree

src/models/gpt.js

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export class GPT {
77
constructor(model_name, url, params) {
88
this.model_name = model_name;
99
this.params = params;
10+
this.url = url; // store so that we know whether a custom URL has been set
1011

1112
let config = {};
1213
if (url)
@@ -31,17 +32,45 @@ export class GPT {
3132
let res = null;
3233

3334
try {
34-
console.log('Awaiting openai api response from model', model)
35-
const response = await this.openai.responses.create({
36-
model: model,
37-
instructions: systemMessage,
38-
input: messages,
39-
...(this.params || {})
40-
});
41-
console.log('Received.')
42-
res = response.output_text;
43-
let stop_seq_index = res.indexOf(stop_seq);
44-
res = stop_seq_index !== -1 ? res.slice(0, stop_seq_index) : res;
35+
console.log('Awaiting openai api response from model', model);
36+
// if a custom URL is set, use chat.completions
37+
// because custom "OpenAI-compatible" endpoints likely do not have responses endpoint
38+
if (this.url) {
39+
let messages = [{'role': 'system', 'content': systemMessage}].concat(turns);
40+
messages = strictFormat(messages);
41+
const pack = {
42+
model: model,
43+
messages,
44+
stop: stop_seq,
45+
...(this.params || {})
46+
};
47+
if (model.includes('o1') || model.includes('o3') || model.includes('5')) {
48+
delete pack.stop;
49+
}
50+
let completion = await this.openai.chat.completions.create(pack);
51+
if (completion.choices[0].finish_reason == 'length')
52+
throw new Error('Context length exceeded');
53+
console.log('Received.');
54+
res = completion.choices[0].message.content;
55+
}
56+
// otherwise, use responses
57+
else {
58+
let messages = strictFormat(turns);
59+
messages = messages.map(message => {
60+
message.content += stop_seq;
61+
return message;
62+
});
63+
const response = await this.openai.responses.create({
64+
model: model,
65+
instructions: systemMessage,
66+
input: messages,
67+
...(this.params || {})
68+
});
69+
console.log('Received.');
70+
res = response.output_text;
71+
let stop_seq_index = res.indexOf(stop_seq);
72+
res = stop_seq_index !== -1 ? res.slice(0, stop_seq_index) : res;
73+
}
4574
}
4675
catch (err) {
4776
if ((err.message == 'Context length exceeded' || err.code == 'context_length_exceeded') && turns.length > 1) {

0 commit comments

Comments
 (0)