Fix: Resolve TypeScript type errors and improve npm installation in Docker build

This commit is contained in:
stabgan
2025-03-26 23:43:23 +05:30
parent f47fa29323
commit b410cad83f
3 changed files with 57 additions and 32 deletions

View File

@@ -17,7 +17,7 @@ COPY package*.json ./
# Install dependencies with development environment for building # Install dependencies with development environment for building
ENV NODE_ENV=development ENV NODE_ENV=development
RUN npm install --no-optional RUN npm install --no-optional --verbose
# Copy source code # Copy source code
COPY . . COPY . .

View File

@@ -71,17 +71,17 @@ export class ModelCache {
public searchModels(params: { public searchModels(params: {
query?: string; query?: string;
provider?: string; provider?: string;
minContextLength?: number; minContextLength?: number | string;
maxContextLength?: number; maxContextLength?: number | string;
maxPromptPrice?: number; maxPromptPrice?: number | string;
maxCompletionPrice?: number; maxCompletionPrice?: number | string;
capabilities?: { capabilities?: {
functions?: boolean; functions?: boolean;
tools?: boolean; tools?: boolean;
vision?: boolean; vision?: boolean;
json_mode?: boolean; json_mode?: boolean;
}; };
limit?: number; limit?: number | string;
}): any[] { }): any[] {
let results = this.getAllModels(); let results = this.getAllModels();
@@ -103,32 +103,52 @@ export class ModelCache {
} }
// Filter by context length // Filter by context length
if (params.minContextLength) { if (params.minContextLength !== undefined) {
results = results.filter( const minContextLength = typeof params.minContextLength === 'string'
(model) => model.context_length >= params.minContextLength ? parseInt(params.minContextLength, 10)
); : params.minContextLength;
if (!isNaN(minContextLength)) {
results = results.filter(
(model) => model.context_length >= minContextLength
);
}
} }
if (params.maxContextLength) { if (params.maxContextLength !== undefined) {
results = results.filter( const maxContextLength = typeof params.maxContextLength === 'string'
(model) => model.context_length <= params.maxContextLength ? parseInt(params.maxContextLength, 10)
); : params.maxContextLength;
if (!isNaN(maxContextLength)) {
results = results.filter(
(model) => model.context_length <= maxContextLength
);
}
} }
// Filter by price // Filter by price
if (params.maxPromptPrice) { if (params.maxPromptPrice !== undefined) {
results = results.filter( const maxPromptPrice = typeof params.maxPromptPrice === 'string'
(model) => ? parseFloat(params.maxPromptPrice)
!model.pricing?.prompt || model.pricing.prompt <= params.maxPromptPrice : params.maxPromptPrice;
); if (!isNaN(maxPromptPrice)) {
results = results.filter(
(model) =>
!model.pricing?.prompt || model.pricing.prompt <= maxPromptPrice
);
}
} }
if (params.maxCompletionPrice) { if (params.maxCompletionPrice !== undefined) {
results = results.filter( const maxCompletionPrice = typeof params.maxCompletionPrice === 'string'
(model) => ? parseFloat(params.maxCompletionPrice)
!model.pricing?.completion || : params.maxCompletionPrice;
model.pricing.completion <= params.maxCompletionPrice if (!isNaN(maxCompletionPrice)) {
); results = results.filter(
(model) =>
!model.pricing?.completion ||
model.pricing.completion <= maxCompletionPrice
);
}
} }
// Filter by capabilities // Filter by capabilities
@@ -150,8 +170,13 @@ export class ModelCache {
} }
// Apply limit // Apply limit
if (params.limit && params.limit > 0) { if (params.limit !== undefined) {
results = results.slice(0, params.limit); const limit = typeof params.limit === 'string'
? parseInt(params.limit, 10)
: params.limit;
if (!isNaN(limit) && limit > 0) {
results = results.slice(0, limit);
}
} }
return results; return results;

View File

@@ -4,17 +4,17 @@ import { OpenRouterAPIClient } from '../openrouter-api.js';
export interface SearchModelsToolRequest { export interface SearchModelsToolRequest {
query?: string; query?: string;
provider?: string; provider?: string;
minContextLength?: number; minContextLength?: number | string;
maxContextLength?: number; maxContextLength?: number | string;
maxPromptPrice?: number; maxPromptPrice?: number | string;
maxCompletionPrice?: number; maxCompletionPrice?: number | string;
capabilities?: { capabilities?: {
functions?: boolean; functions?: boolean;
tools?: boolean; tools?: boolean;
vision?: boolean; vision?: boolean;
json_mode?: boolean; json_mode?: boolean;
}; };
limit?: number; limit?: number | string;
} }
export async function handleSearchModels( export async function handleSearchModels(