Skip to content

Commit c7d7aef

Browse files
committed
refactor: update GITHUB_MODELS_BASE URL and enhance vector index logging
1 parent e9d03c6 commit c7d7aef

4 files changed

Lines changed: 28 additions & 10 deletions

File tree

packages/core/src/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ export const OPENROUTER_API_CHAT_URL = "https://openrouter.ai/api/v1/chat/comple
221221
export const OPENROUTER_SITE_URL_HEADER = "HTTP-Referer";
222222
export const OPENROUTER_SITE_NAME_HEADER = "X-Title";
223223

224-
export const GITHUB_MODELS_BASE = "https://models.github.ai/inference/chat/completions";
224+
export const GITHUB_MODELS_BASE = "https://models.github.ai/inference";
225225

226226
export const DOCS_CONFIGURATION_URL =
227227
"https://microsoft.github.io/genaiscript/getting-started/configuration/";

packages/core/src/llmsdata.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ export default {
292292
vision: "openai/gpt-4.1",
293293
reasoning: "openai/o3",
294294
reasoning_small: "openai/o3-mini",
295+
embeddings: "openai/text-embedding-3-small",
295296
},
296297
models: {
297298
"o1-preview": {

packages/core/src/openai.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ import { host } from "./host.js";
66
import {
77
AZURE_AI_INFERENCE_VERSION,
88
AZURE_OPENAI_API_VERSION,
9+
MODEL_PROVIDER_ALIBABA,
10+
MODEL_PROVIDER_AZURE_AI_INFERENCE,
911
MODEL_PROVIDER_AZURE_OPENAI,
1012
MODEL_PROVIDER_AZURE_SERVERLESS_MODELS,
1113
MODEL_PROVIDER_AZURE_SERVERLESS_OPENAI,
14+
MODEL_PROVIDER_GITHUB,
15+
MODEL_PROVIDER_HUGGINGFACE,
16+
MODEL_PROVIDER_OPENAI,
1217
MODEL_PROVIDER_OPENAI_HOSTS,
1318
OPENROUTER_API_CHAT_URL,
1419
OPENROUTER_SITE_NAME_HEADER,
@@ -195,24 +200,28 @@ export const OpenAIChatCompletion: ChatCompletionHandler = async (req, cfg, opti
195200
let url = "";
196201
const toolCalls: ChatCompletionToolCall[] = [];
197202

198-
if (cfg.type === "openai" || cfg.type === "localai" || cfg.type === "alibaba") {
203+
if (
204+
cfg.type === MODEL_PROVIDER_OPENAI ||
205+
cfg.type === "localai" ||
206+
cfg.type === MODEL_PROVIDER_ALIBABA
207+
) {
199208
url = trimTrailingSlash(cfg.base) + "/chat/completions";
200209
if (url === OPENROUTER_API_CHAT_URL) {
201210
(headers as any)[OPENROUTER_SITE_URL_HEADER] = process.env.OPENROUTER_SITE_URL || TOOL_URL;
202211
(headers as any)[OPENROUTER_SITE_NAME_HEADER] = process.env.OPENROUTER_SITE_NAME || TOOL_NAME;
203212
}
204-
} else if (cfg.type === "azure") {
213+
} else if (cfg.type === MODEL_PROVIDER_AZURE_OPENAI) {
205214
delete postReq.model;
206215
const version = cfg.version || AZURE_OPENAI_API_VERSION;
207216
trace?.itemValue(`version`, version);
208217
url = trimTrailingSlash(cfg.base) + "/" + family + `/chat/completions?api-version=${version}`;
209-
} else if (cfg.type === "azure_ai_inference") {
218+
} else if (cfg.type === MODEL_PROVIDER_AZURE_AI_INFERENCE) {
210219
const version = cfg.version;
211220
trace?.itemValue(`version`, version);
212221
url = trimTrailingSlash(cfg.base) + `/chat/completions`;
213222
if (version) url += `?api-version=${version}`;
214223
(headers as any)["extra-parameters"] = "pass-through";
215-
} else if (cfg.type === "azure_serverless_models") {
224+
} else if (cfg.type === MODEL_PROVIDER_AZURE_SERVERLESS_MODELS) {
216225
const version = cfg.version || AZURE_AI_INFERENCE_VERSION;
217226
trace?.itemValue(`version`, version);
218227
url =
@@ -223,15 +232,15 @@ export const OpenAIChatCompletion: ChatCompletionHandler = async (req, cfg, opti
223232
(headers as any)["extra-parameters"] = "pass-through";
224233
delete postReq.model;
225234
delete postReq.stream_options;
226-
} else if (cfg.type === "azure_serverless") {
235+
} else if (cfg.type === MODEL_PROVIDER_AZURE_SERVERLESS_OPENAI) {
227236
const version = cfg.version || AZURE_AI_INFERENCE_VERSION;
228237
trace?.itemValue(`version`, version);
229238
url = trimTrailingSlash(cfg.base) + "/" + family + `/chat/completions?api-version=${version}`;
230239
// https://learn.microsoft.com/en-us/azure/machine-learning/reference-model-inference-api?view=azureml-api-2&tabs=javascript#extensibility
231240
(headers as any)["extra-parameters"] = "pass-through";
232241
delete postReq.model;
233-
} else if (cfg.type === "github") {
234-
url = cfg.base;
242+
} else if (cfg.type === MODEL_PROVIDER_GITHUB) {
243+
url = trimTrailingSlash(cfg.base) + "/chat/completions";
235244
const { prefix } = /^(?<prefix>[^-]+)-([^\/]+)$/.exec(postReq.model)?.groups || {};
236245
const patch = {
237246
gpt: "openai",
@@ -247,7 +256,7 @@ export const OpenAIChatCompletion: ChatCompletionHandler = async (req, cfg, opti
247256
postReq.model = `${patch}/${postReq.model}`;
248257
dbg(`updated model to ${postReq.model}`);
249258
}
250-
} else if (cfg.type === "huggingface") {
259+
} else if (cfg.type === MODEL_PROVIDER_HUGGINGFACE) {
251260
// https://github.com/huggingface/text-generation-inference/issues/2946
252261
delete postReq.model;
253262
url =

packages/core/src/vectorsearch.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import type {
2626
WorkspaceFileIndex,
2727
WorkspaceFileWithScore,
2828
} from "./types.js";
29+
import { genaiscriptDebug } from "./debug.js";
30+
const dbg = genaiscriptDebug("vector");
2931

3032
interface EmbeddingsResponse {
3133
/**
@@ -126,6 +128,7 @@ export async function vectorCreateIndex(
126128
assert(!!indexName);
127129
options = options || {};
128130
const { type = "local", embeddingsModel, cancellationToken, trace } = options || {};
131+
dbg(`create index %s %s %s`, indexName, type, embeddingsModel);
129132

130133
let factory: WorkspaceFileIndexCreator;
131134
if (type === "azure_ai_search") factory = azureAISearchIndex;
@@ -154,13 +157,18 @@ export async function vectorCreateIndex(
154157
checkCancelled(cancellationToken);
155158

156159
if (!options.vectorSize) {
160+
dbg(`sniffing vector size for %s`, indexName);
157161
const sniff = await cachedEmbedder(
162+
158163
`Lorem ipsum dolor sit amet, consectetur adipiscing elit
159164
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`,
160165
configuration,
161166
options,
162167
);
163-
options.vectorSize = sniff.data[0].length;
168+
const vectorSize = sniff.data?.[0]?.length;
169+
dbg(`sniffed vector size: %o`, sniff.data);
170+
if (isNaN(vectorSize)) throw new Error("embeddings: unable to determine vector size");
171+
options.vectorSize = vectorSize;
164172
}
165173

166174
return await factory(indexName, configuration, cachedEmbedder, options);

0 commit comments

Comments
 (0)