@juspay/neurolink 7.1.0 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -2
- package/README.md +16 -11
- package/dist/cli/commands/config.d.ts +2 -2
- package/dist/cli/commands/config.js +22 -21
- package/dist/cli/commands/mcp.d.ts +79 -0
- package/dist/cli/commands/mcp.js +916 -0
- package/dist/cli/commands/models.d.ts +63 -0
- package/dist/cli/commands/models.js +653 -0
- package/dist/cli/commands/ollama.js +56 -55
- package/dist/cli/factories/commandFactory.d.ts +14 -0
- package/dist/cli/factories/commandFactory.js +346 -47
- package/dist/cli/index.js +25 -10
- package/dist/cli/utils/completeSetup.js +9 -8
- package/dist/cli/utils/envManager.js +7 -6
- package/dist/cli/utils/interactiveSetup.js +20 -19
- package/dist/core/analytics.js +25 -38
- package/dist/core/baseProvider.d.ts +8 -0
- package/dist/core/baseProvider.js +177 -68
- package/dist/core/constants.d.ts +11 -0
- package/dist/core/constants.js +17 -0
- package/dist/core/evaluation.js +25 -14
- package/dist/core/factory.js +19 -18
- package/dist/core/streamAnalytics.d.ts +65 -0
- package/dist/core/streamAnalytics.js +125 -0
- package/dist/lib/core/analytics.js +25 -38
- package/dist/lib/core/baseProvider.d.ts +8 -0
- package/dist/lib/core/baseProvider.js +177 -68
- package/dist/lib/core/constants.d.ts +11 -0
- package/dist/lib/core/constants.js +17 -0
- package/dist/lib/core/evaluation.js +25 -14
- package/dist/lib/core/factory.js +19 -18
- package/dist/lib/core/streamAnalytics.d.ts +65 -0
- package/dist/lib/core/streamAnalytics.js +125 -0
- package/dist/lib/models/modelRegistry.d.ts +132 -0
- package/dist/lib/models/modelRegistry.js +483 -0
- package/dist/lib/models/modelResolver.d.ts +115 -0
- package/dist/lib/models/modelResolver.js +467 -0
- package/dist/lib/neurolink.d.ts +4 -1
- package/dist/lib/neurolink.js +101 -67
- package/dist/lib/providers/anthropic.js +3 -0
- package/dist/lib/providers/googleAiStudio.js +13 -0
- package/dist/lib/providers/huggingFace.js +15 -3
- package/dist/lib/providers/mistral.js +19 -7
- package/dist/lib/providers/ollama.js +31 -7
- package/dist/lib/providers/openAI.js +12 -0
- package/dist/lib/sdk/toolRegistration.js +2 -2
- package/dist/lib/types/cli.d.ts +56 -1
- package/dist/lib/types/contextTypes.d.ts +110 -0
- package/dist/lib/types/contextTypes.js +176 -0
- package/dist/lib/types/index.d.ts +4 -1
- package/dist/lib/types/mcpTypes.d.ts +118 -7
- package/dist/lib/types/providers.d.ts +81 -0
- package/dist/lib/types/streamTypes.d.ts +44 -7
- package/dist/lib/types/tools.d.ts +9 -0
- package/dist/lib/types/universalProviderOptions.d.ts +3 -1
- package/dist/lib/types/universalProviderOptions.js +2 -1
- package/dist/lib/utils/logger.d.ts +7 -0
- package/dist/lib/utils/logger.js +11 -0
- package/dist/lib/utils/performance.d.ts +105 -0
- package/dist/lib/utils/performance.js +210 -0
- package/dist/lib/utils/retryHandler.d.ts +89 -0
- package/dist/lib/utils/retryHandler.js +269 -0
- package/dist/models/modelRegistry.d.ts +132 -0
- package/dist/models/modelRegistry.js +483 -0
- package/dist/models/modelResolver.d.ts +115 -0
- package/dist/models/modelResolver.js +468 -0
- package/dist/neurolink.d.ts +4 -1
- package/dist/neurolink.js +101 -67
- package/dist/providers/anthropic.js +3 -0
- package/dist/providers/googleAiStudio.js +13 -0
- package/dist/providers/huggingFace.js +15 -3
- package/dist/providers/mistral.js +19 -7
- package/dist/providers/ollama.js +31 -7
- package/dist/providers/openAI.js +12 -0
- package/dist/sdk/toolRegistration.js +2 -2
- package/dist/types/cli.d.ts +56 -1
- package/dist/types/contextTypes.d.ts +110 -0
- package/dist/types/contextTypes.js +177 -0
- package/dist/types/index.d.ts +4 -1
- package/dist/types/mcpTypes.d.ts +118 -7
- package/dist/types/providers.d.ts +81 -0
- package/dist/types/streamTypes.d.ts +44 -7
- package/dist/types/tools.d.ts +9 -0
- package/dist/types/universalProviderOptions.d.ts +3 -1
- package/dist/types/universalProviderOptions.js +3 -1
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.js +11 -0
- package/dist/utils/performance.d.ts +105 -0
- package/dist/utils/performance.js +210 -0
- package/dist/utils/retryHandler.d.ts +89 -0
- package/dist/utils/retryHandler.js +269 -0
- package/package.json +2 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { createAnalytics } from "./analytics.js";
|
|
2
|
+
import { logger } from "../utils/logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Base implementation for collecting analytics from Vercel AI SDK stream results
|
|
5
|
+
*/
|
|
6
|
+
export class BaseStreamAnalyticsCollector {
|
|
7
|
+
/**
|
|
8
|
+
* Collect token usage from stream result
|
|
9
|
+
*/
|
|
10
|
+
async collectUsage(result) {
|
|
11
|
+
try {
|
|
12
|
+
const usage = await result.usage;
|
|
13
|
+
if (!usage) {
|
|
14
|
+
logger.debug("No usage data available from stream result");
|
|
15
|
+
return {
|
|
16
|
+
inputTokens: 0,
|
|
17
|
+
outputTokens: 0,
|
|
18
|
+
totalTokens: 0,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
inputTokens: usage.promptTokens || 0,
|
|
23
|
+
outputTokens: usage.completionTokens || 0,
|
|
24
|
+
totalTokens: usage.totalTokens ||
|
|
25
|
+
(usage.promptTokens || 0) + (usage.completionTokens || 0),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
logger.warn("Failed to collect usage from stream result", { error });
|
|
30
|
+
return {
|
|
31
|
+
inputTokens: 0,
|
|
32
|
+
outputTokens: 0,
|
|
33
|
+
totalTokens: 0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Collect response metadata from stream result
|
|
39
|
+
*/
|
|
40
|
+
async collectMetadata(result) {
|
|
41
|
+
try {
|
|
42
|
+
const [response, finishReason] = await Promise.all([
|
|
43
|
+
result.response,
|
|
44
|
+
result.finishReason,
|
|
45
|
+
]);
|
|
46
|
+
return {
|
|
47
|
+
id: response?.id,
|
|
48
|
+
model: response?.model,
|
|
49
|
+
timestamp: response?.timestamp instanceof Date
|
|
50
|
+
? response.timestamp.getTime()
|
|
51
|
+
: response?.timestamp || Date.now(),
|
|
52
|
+
finishReason: finishReason,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
logger.warn("Failed to collect metadata from stream result", { error });
|
|
57
|
+
const finishReason = await result.finishReason.catch(() => "error");
|
|
58
|
+
return {
|
|
59
|
+
timestamp: Date.now(),
|
|
60
|
+
finishReason: finishReason,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create comprehensive analytics from stream result
|
|
66
|
+
*/
|
|
67
|
+
async createAnalytics(provider, model, result, responseTime, metadata) {
|
|
68
|
+
try {
|
|
69
|
+
// Collect analytics data in parallel
|
|
70
|
+
const [usage, responseMetadata] = await Promise.all([
|
|
71
|
+
this.collectUsage(result),
|
|
72
|
+
this.collectMetadata(result),
|
|
73
|
+
]);
|
|
74
|
+
// Get final text content and finish reason
|
|
75
|
+
const [content, finishReason, toolResults, toolCalls] = await Promise.all([
|
|
76
|
+
result.text,
|
|
77
|
+
result.finishReason,
|
|
78
|
+
result.toolResults || Promise.resolve([]),
|
|
79
|
+
result.toolCalls || Promise.resolve([]),
|
|
80
|
+
]);
|
|
81
|
+
// Create comprehensive analytics
|
|
82
|
+
return createAnalytics(provider, model, {
|
|
83
|
+
usage,
|
|
84
|
+
content,
|
|
85
|
+
response: responseMetadata,
|
|
86
|
+
finishReason: finishReason,
|
|
87
|
+
toolResults: toolResults,
|
|
88
|
+
toolCalls: toolCalls,
|
|
89
|
+
}, responseTime, {
|
|
90
|
+
...metadata,
|
|
91
|
+
streamingMode: true,
|
|
92
|
+
responseId: responseMetadata.id,
|
|
93
|
+
finishReason: finishReason,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.error("Failed to create analytics from stream result", {
|
|
98
|
+
provider,
|
|
99
|
+
model,
|
|
100
|
+
error: error instanceof Error ? error.message : String(error),
|
|
101
|
+
});
|
|
102
|
+
// Return minimal analytics on error
|
|
103
|
+
return createAnalytics(provider, model, { usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 } }, responseTime, {
|
|
104
|
+
...metadata,
|
|
105
|
+
streamingMode: true,
|
|
106
|
+
analyticsError: true,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Clean up resources and force garbage collection if needed
|
|
112
|
+
*/
|
|
113
|
+
cleanup() {
|
|
114
|
+
// Only force garbage collection if memory usage exceeds 500 MB
|
|
115
|
+
const heapUsed = process.memoryUsage().heapUsed;
|
|
116
|
+
const GC_THRESHOLD = 500 * 1024 * 1024; // 500 MB
|
|
117
|
+
if (typeof global !== "undefined" && global.gc && heapUsed > GC_THRESHOLD) {
|
|
118
|
+
global.gc();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Global instance of stream analytics collector
|
|
124
|
+
*/
|
|
125
|
+
export const streamAnalyticsCollector = new BaseStreamAnalyticsCollector();
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Registry for NeuroLink CLI Commands
|
|
3
|
+
* Provides centralized model data for models command system
|
|
4
|
+
* Part of Phase 4.1 - Models Command System
|
|
5
|
+
*/
|
|
6
|
+
import { AIProviderName } from "../core/types.js";
|
|
7
|
+
import type { JsonValue } from "../types/common.js";
|
|
8
|
+
/**
|
|
9
|
+
* Model capabilities interface
|
|
10
|
+
*/
|
|
11
|
+
export interface ModelCapabilities {
|
|
12
|
+
vision: boolean;
|
|
13
|
+
functionCalling: boolean;
|
|
14
|
+
codeGeneration: boolean;
|
|
15
|
+
reasoning: boolean;
|
|
16
|
+
multimodal: boolean;
|
|
17
|
+
streaming: boolean;
|
|
18
|
+
jsonMode: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Model pricing information
|
|
22
|
+
*/
|
|
23
|
+
export interface ModelPricing {
|
|
24
|
+
inputCostPer1K: number;
|
|
25
|
+
outputCostPer1K: number;
|
|
26
|
+
currency: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Model performance characteristics
|
|
30
|
+
*/
|
|
31
|
+
export interface ModelPerformance {
|
|
32
|
+
speed: "fast" | "medium" | "slow";
|
|
33
|
+
quality: "high" | "medium" | "low";
|
|
34
|
+
accuracy: "high" | "medium" | "low";
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Model limitations and constraints
|
|
38
|
+
*/
|
|
39
|
+
export interface ModelLimits {
|
|
40
|
+
maxContextTokens: number;
|
|
41
|
+
maxOutputTokens: number;
|
|
42
|
+
maxRequestsPerMinute?: number;
|
|
43
|
+
maxRequestsPerDay?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Use case suitability scores (1-10 scale)
|
|
47
|
+
*/
|
|
48
|
+
export interface UseCaseSuitability {
|
|
49
|
+
coding: number;
|
|
50
|
+
creative: number;
|
|
51
|
+
analysis: number;
|
|
52
|
+
conversation: number;
|
|
53
|
+
reasoning: number;
|
|
54
|
+
translation: number;
|
|
55
|
+
summarization: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Complete model information
|
|
59
|
+
*/
|
|
60
|
+
export interface ModelInfo {
|
|
61
|
+
id: string;
|
|
62
|
+
name: string;
|
|
63
|
+
provider: AIProviderName;
|
|
64
|
+
description: string;
|
|
65
|
+
capabilities: ModelCapabilities;
|
|
66
|
+
pricing: ModelPricing;
|
|
67
|
+
performance: ModelPerformance;
|
|
68
|
+
limits: ModelLimits;
|
|
69
|
+
useCases: UseCaseSuitability;
|
|
70
|
+
aliases: string[];
|
|
71
|
+
deprecated: boolean;
|
|
72
|
+
isLocal: boolean;
|
|
73
|
+
releaseDate?: string;
|
|
74
|
+
category: "general" | "coding" | "creative" | "vision" | "reasoning";
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Model search filters
|
|
78
|
+
*/
|
|
79
|
+
export interface ModelSearchFilters {
|
|
80
|
+
provider?: AIProviderName | AIProviderName[];
|
|
81
|
+
capability?: keyof ModelCapabilities | (keyof ModelCapabilities)[];
|
|
82
|
+
useCase?: keyof UseCaseSuitability;
|
|
83
|
+
maxCost?: number;
|
|
84
|
+
minContextSize?: number;
|
|
85
|
+
maxContextSize?: number;
|
|
86
|
+
performance?: ModelPerformance["speed"] | ModelPerformance["quality"];
|
|
87
|
+
category?: ModelInfo["category"] | ModelInfo["category"][];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Model search result with ranking
|
|
91
|
+
*/
|
|
92
|
+
export interface ModelSearchResult {
|
|
93
|
+
model: ModelInfo;
|
|
94
|
+
score: number;
|
|
95
|
+
matchReasons: string[];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Comprehensive model registry
|
|
99
|
+
*/
|
|
100
|
+
export declare const MODEL_REGISTRY: Record<string, ModelInfo>;
|
|
101
|
+
/**
|
|
102
|
+
* Model aliases registry for quick resolution
|
|
103
|
+
*/
|
|
104
|
+
export declare const MODEL_ALIASES: Record<string, string>;
|
|
105
|
+
/**
|
|
106
|
+
* Use case to model mappings
|
|
107
|
+
*/
|
|
108
|
+
export declare const USE_CASE_RECOMMENDATIONS: Record<string, string[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Get all models
|
|
111
|
+
*/
|
|
112
|
+
export declare function getAllModels(): ModelInfo[];
|
|
113
|
+
/**
|
|
114
|
+
* Get model by ID
|
|
115
|
+
*/
|
|
116
|
+
export declare function getModelById(id: string): ModelInfo | undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Get models by provider
|
|
119
|
+
*/
|
|
120
|
+
export declare function getModelsByProvider(provider: AIProviderName): ModelInfo[];
|
|
121
|
+
/**
|
|
122
|
+
* Get available providers
|
|
123
|
+
*/
|
|
124
|
+
export declare function getAvailableProviders(): AIProviderName[];
|
|
125
|
+
/**
|
|
126
|
+
* Calculate estimated cost for a request
|
|
127
|
+
*/
|
|
128
|
+
export declare function calculateCost(model: ModelInfo, inputTokens: number, outputTokens: number): number;
|
|
129
|
+
/**
|
|
130
|
+
* Format model for display
|
|
131
|
+
*/
|
|
132
|
+
export declare function formatModelForDisplay(model: ModelInfo): JsonValue;
|