UNPKG

@azure-rest/ai-inference

Version:
69 lines 3.12 kB
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. const responseMap = { "POST /chat/completions": ["200"], "GET /info": ["200"], "POST /embeddings": ["200"], "POST /images/embeddings": ["200"], }; export function isUnexpected(response) { const lroOriginal = response.headers["x-ms-original-url"]; const url = new URL(lroOriginal !== null && lroOriginal !== void 0 ? lroOriginal : response.request.url); const method = response.request.method; let pathDetails = responseMap[`${method} ${url.pathname}`]; if (!pathDetails) { pathDetails = getParametrizedPathSuccess(method, url.pathname); } return !pathDetails.includes(response.status); } function getParametrizedPathSuccess(method, path) { var _a, _b, _c, _d; const pathParts = path.split("/"); let matchedLen = -1, matchedValue = []; for (const [key, value] of Object.entries(responseMap)) { // Extracting the path from the map key which is in format // GET /path/foo if (!key.startsWith(method)) { continue; } const candidatePath = getPathFromMapKey(key); // Get each part of the url path const candidateParts = candidatePath.split("/"); // track if we have found a match to return the values found. let found = true; for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) { if (((_a = candidateParts[i]) === null || _a === void 0 ? void 0 : _a.startsWith("{")) && ((_b = candidateParts[i]) === null || _b === void 0 ? void 0 : _b.indexOf("}")) !== -1) { const start = candidateParts[i].indexOf("}") + 1, end = (_c = candidateParts[i]) === null || _c === void 0 ? void 0 : _c.length; // If the current part of the candidate is a "template" part // Try to use the suffix of pattern to match the path // {guid} ==> $ // {guid}:export ==> :export$ const isMatched = new RegExp(`${(_d = candidateParts[i]) === null || _d === void 0 ? void 0 : _d.slice(start, end)}`).test(pathParts[j] || ""); if (!isMatched) { found = false; break; } continue; } // If the candidate part is not a template and // the parts don't match mark the candidate as not found // to move on with the next candidate path. if (candidateParts[i] !== pathParts[j]) { found = false; break; } } // We finished evaluating the current candidate parts // Update the matched value if and only if we found the longer pattern if (found && candidatePath.length > matchedLen) { matchedLen = candidatePath.length; matchedValue = value; } } return matchedValue; } function getPathFromMapKey(mapKey) { const pathStart = mapKey.indexOf("/"); return mapKey.slice(pathStart); } //# sourceMappingURL=isUnexpected.js.map