@@ -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