Hansimov commited on
Commit
8a35d38
1 Parent(s): eae509c

:boom: [Fix] Incorrect httpProxyDict config in axios, and missing endpoint param for fill_avaialable_models_select

Browse files
networks/llm_requester.js CHANGED
@@ -133,7 +133,7 @@ export class AvailableModelsRequester {
133
  signal: this.controller.signal,
134
  };
135
  }
136
- get() {
137
  this.construct_request_params();
138
  return fetch(this.backend_request_endpoint, this.backend_request_params)
139
  .then((response) => response.json())
 
133
  signal: this.controller.signal,
134
  };
135
  }
136
+ async get() {
137
  this.construct_request_params();
138
  return fetch(this.backend_request_endpoint, this.backend_request_params)
139
  .then((response) => response.json())
server.js CHANGED
@@ -66,6 +66,8 @@ const loadHttpProxy = async () => {
66
  host: url.hostname,
67
  port: parseInt(url.port),
68
  };
 
 
69
  }
70
  } catch (error) {
71
  console.warn(
@@ -84,12 +86,15 @@ app.post("/models", async (req, res) => {
84
  openai_request_headers,
85
  } = req.body;
86
 
87
- const response = await axios({
88
  method: openai_request_method,
89
  url: openai_endpoint + "/v1/models",
90
  headers: openai_request_headers,
91
- proxy: httpProxyDict,
92
- });
 
 
 
93
  res.json(response.data);
94
  } catch (error) {
95
  console.error(error);
@@ -106,14 +111,17 @@ app.post("/chat/completions", async (req, res) => {
106
  openai_request_body,
107
  } = req.body;
108
 
109
- const response = await axios({
110
  method: openai_request_method,
111
  url: openai_endpoint + "/v1/chat/completions",
112
  data: openai_request_body,
113
  headers: openai_request_headers,
114
  responseType: "stream",
115
- proxy: httpProxyDict,
116
- });
 
 
 
117
  response.data.pipe(res);
118
  } catch (error) {
119
  console.error(error);
 
66
  host: url.hostname,
67
  port: parseInt(url.port),
68
  };
69
+ } else {
70
+ console.warn("http_proxy not found in secrets");
71
  }
72
  } catch (error) {
73
  console.warn(
 
86
  openai_request_headers,
87
  } = req.body;
88
 
89
+ let axios_config = {
90
  method: openai_request_method,
91
  url: openai_endpoint + "/v1/models",
92
  headers: openai_request_headers,
93
+ };
94
+ if (httpProxyDict) {
95
+ axios_config.proxy = httpProxyDict;
96
+ }
97
+ const response = await axios(axios_config);
98
  res.json(response.data);
99
  } catch (error) {
100
  console.error(error);
 
111
  openai_request_body,
112
  } = req.body;
113
 
114
+ let axios_config = {
115
  method: openai_request_method,
116
  url: openai_endpoint + "/v1/chat/completions",
117
  data: openai_request_body,
118
  headers: openai_request_headers,
119
  responseType: "stream",
120
+ };
121
+ if (httpProxyDict) {
122
+ axios_config.proxy = httpProxyDict;
123
+ }
124
+ const response = await axios(axios_config);
125
  response.data.pipe(res);
126
  } catch (error) {
127
  console.error(error);
storages/endpoint_storage.js CHANGED
@@ -161,14 +161,15 @@ class EndpointStorage {
161
  }
162
  });
163
  }
164
- fetch_available_models(endpoint) {
165
  console.log("fetch available models for endpoint:", endpoint);
166
- // if endpoint not starts with http(s), skip
167
- // such as "user-customized", which is used for other local functions or agents
168
  if (endpoint.startsWith("http")) {
169
  let available_models_requester = new AvailableModelsRequester(
170
  endpoint
171
  );
 
172
  // update available_models field of endpoint index in db.endpoints
173
  return available_models_requester.get().then((available_models) => {
174
  this.db.endpoints.update(endpoint, {
@@ -177,35 +178,47 @@ class EndpointStorage {
177
  return available_models;
178
  });
179
  } else {
 
180
  return Promise.resolve([]);
181
  }
182
  }
183
- fill_available_models_select() {
184
  // fetch available_models for all endpoints, and then fill available_models_select
185
  let available_models_select = $("#available-models-select");
186
  available_models_select.empty();
187
- this.db.endpoints.toArray().then((endpoints) => {
188
- let promises = endpoints.map((row) => {
189
- return this.fetch_available_models(row.endpoint).then(
190
- (available_models) => {
191
- available_models.forEach((model_id) => {
192
- let model_name_and_value =
193
- this.construct_model_name_and_value(
194
- row.endpoint,
195
- model_id
196
- );
197
- let option = new Option(
198
- model_name_and_value[0],
199
- model_name_and_value[1]
200
  );
201
- available_models_select.append(option);
202
- });
203
- }
204
- );
205
- });
206
- Promise.all(promises).then(() => {
207
- this.set_default_model();
 
 
 
 
 
 
 
 
 
 
208
  });
 
 
 
 
209
  });
210
  }
211
  construct_model_name_and_value(endpoint, model_id) {
 
161
  }
162
  });
163
  }
164
+ async fetch_available_models(endpoint) {
165
  console.log("fetch available models for endpoint:", endpoint);
166
+ // if endpoint not starts with http(s), skip,
167
+ // such as "user-customized", which is might be local functions or agents
168
  if (endpoint.startsWith("http")) {
169
  let available_models_requester = new AvailableModelsRequester(
170
  endpoint
171
  );
172
+ console.log(`try to fetch available_models from ${endpoint}`);
173
  // update available_models field of endpoint index in db.endpoints
174
  return available_models_requester.get().then((available_models) => {
175
  this.db.endpoints.update(endpoint, {
 
178
  return available_models;
179
  });
180
  } else {
181
+ console.log("skip fetch available models for endpoint:", endpoint);
182
  return Promise.resolve([]);
183
  }
184
  }
185
+ fill_available_models_select(endpoint = null) {
186
  // fetch available_models for all endpoints, and then fill available_models_select
187
  let available_models_select = $("#available-models-select");
188
  available_models_select.empty();
189
+ let promises = [];
190
+
191
+ const fill_models = (endpoint) => {
192
+ return this.fetch_available_models(endpoint).then(
193
+ (available_models) => {
194
+ available_models.forEach((model_id) => {
195
+ let model_name_and_value =
196
+ this.construct_model_name_and_value(
197
+ endpoint,
198
+ model_id
 
 
 
199
  );
200
+ let option = new Option(
201
+ model_name_and_value[0],
202
+ model_name_and_value[1]
203
+ );
204
+ available_models_select.append(option);
205
+ });
206
+ }
207
+ );
208
+ };
209
+
210
+ if (endpoint) {
211
+ promises.push(fill_models(endpoint));
212
+ } else {
213
+ this.db.endpoints.toArray().then((endpoints) => {
214
+ endpoints.map(async (row) => {
215
+ promises.push(fill_models(row.endpoint));
216
+ });
217
  });
218
+ }
219
+
220
+ Promise.all(promises).then(() => {
221
+ this.set_default_model();
222
  });
223
  }
224
  construct_model_name_and_value(endpoint, model_id) {