mcp-image 0.1.0 → 0.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/README.md +41 -17
- package/dist/api/geminiClient.d.ts +2 -12
- package/dist/api/geminiClient.d.ts.map +1 -1
- package/dist/api/geminiClient.js +28 -56
- package/dist/api/geminiClient.js.map +1 -1
- package/dist/api/geminiTextClient.d.ts +42 -0
- package/dist/api/geminiTextClient.d.ts.map +1 -0
- package/dist/api/geminiTextClient.js +198 -0
- package/dist/api/geminiTextClient.js.map +1 -0
- package/dist/business/__tests__/mocks/mcpSamplingClient.mock.d.ts +84 -0
- package/dist/business/__tests__/mocks/mcpSamplingClient.mock.d.ts.map +1 -0
- package/dist/business/__tests__/mocks/mcpSamplingClient.mock.js +100 -0
- package/dist/business/__tests__/mocks/mcpSamplingClient.mock.js.map +1 -0
- package/dist/business/bestPracticesEngine.d.ts +149 -0
- package/dist/business/bestPracticesEngine.d.ts.map +1 -0
- package/dist/business/bestPracticesEngine.js +781 -0
- package/dist/business/bestPracticesEngine.js.map +1 -0
- package/dist/business/complexityAssessment.d.ts +132 -0
- package/dist/business/complexityAssessment.d.ts.map +1 -0
- package/dist/business/complexityAssessment.js +488 -0
- package/dist/business/complexityAssessment.js.map +1 -0
- package/dist/business/fallbackStrategies.d.ts +177 -0
- package/dist/business/fallbackStrategies.d.ts.map +1 -0
- package/dist/business/fallbackStrategies.js +368 -0
- package/dist/business/fallbackStrategies.js.map +1 -0
- package/dist/business/imageGenerator.d.ts.map +1 -1
- package/dist/business/imageGenerator.js +26 -5
- package/dist/business/imageGenerator.js.map +1 -1
- package/dist/business/multiImage/aspectRatioController.d.ts +77 -0
- package/dist/business/multiImage/aspectRatioController.d.ts.map +1 -0
- package/dist/business/multiImage/aspectRatioController.js +580 -0
- package/dist/business/multiImage/aspectRatioController.js.map +1 -0
- package/dist/business/multiImage/multiImageCoordinator.d.ts +142 -0
- package/dist/business/multiImage/multiImageCoordinator.d.ts.map +1 -0
- package/dist/business/multiImage/multiImageCoordinator.js +801 -0
- package/dist/business/multiImage/multiImageCoordinator.js.map +1 -0
- package/dist/business/pomlTemplateEngine.d.ts +206 -0
- package/dist/business/pomlTemplateEngine.d.ts.map +1 -0
- package/dist/business/pomlTemplateEngine.js +737 -0
- package/dist/business/pomlTemplateEngine.js.map +1 -0
- package/dist/business/promptOrchestrator.d.ts +173 -0
- package/dist/business/promptOrchestrator.d.ts.map +1 -0
- package/dist/business/promptOrchestrator.js +490 -0
- package/dist/business/promptOrchestrator.js.map +1 -0
- package/dist/business/responseBuilder.d.ts +2 -2
- package/dist/business/responseBuilder.d.ts.map +1 -1
- package/dist/business/responseBuilder.js +6 -1
- package/dist/business/responseBuilder.js.map +1 -1
- package/dist/business/structuredPromptGenerator.d.ts +54 -0
- package/dist/business/structuredPromptGenerator.d.ts.map +1 -0
- package/dist/business/structuredPromptGenerator.js +208 -0
- package/dist/business/structuredPromptGenerator.js.map +1 -0
- package/dist/business/templateNormalizer.d.ts +81 -0
- package/dist/business/templateNormalizer.d.ts.map +1 -0
- package/dist/business/templateNormalizer.js +659 -0
- package/dist/business/templateNormalizer.js.map +1 -0
- package/dist/documentation/apiContractValidation.d.ts +62 -0
- package/dist/documentation/apiContractValidation.d.ts.map +1 -0
- package/dist/documentation/apiContractValidation.js +305 -0
- package/dist/documentation/apiContractValidation.js.map +1 -0
- package/dist/infrastructure/concurrency/concurrencyManager.d.ts +101 -0
- package/dist/infrastructure/concurrency/concurrencyManager.d.ts.map +1 -0
- package/dist/infrastructure/concurrency/concurrencyManager.js +345 -0
- package/dist/infrastructure/concurrency/concurrencyManager.js.map +1 -0
- package/dist/infrastructure/config/secureConfigManager.d.ts +319 -0
- package/dist/infrastructure/config/secureConfigManager.d.ts.map +1 -0
- package/dist/infrastructure/config/secureConfigManager.js +600 -0
- package/dist/infrastructure/config/secureConfigManager.js.map +1 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandler.d.ts +229 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandler.d.ts.map +1 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandler.js +61 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandler.js.map +1 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.d.ts +133 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.d.ts.map +1 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.js +569 -0
- package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.js.map +1 -0
- package/dist/infrastructure/mcp/MCPSamplingClient.d.ts +19 -0
- package/dist/infrastructure/mcp/MCPSamplingClient.d.ts.map +1 -0
- package/dist/infrastructure/mcp/MCPSamplingClient.js +31 -0
- package/dist/infrastructure/mcp/MCPSamplingClient.js.map +1 -0
- package/dist/infrastructure/mcp/RealMCPSamplingClient.d.ts +59 -0
- package/dist/infrastructure/mcp/RealMCPSamplingClient.d.ts.map +1 -0
- package/dist/infrastructure/mcp/RealMCPSamplingClient.js +271 -0
- package/dist/infrastructure/mcp/RealMCPSamplingClient.js.map +1 -0
- package/dist/infrastructure/metadata/generationMetadata.d.ts +72 -0
- package/dist/infrastructure/metadata/generationMetadata.d.ts.map +1 -0
- package/dist/infrastructure/metadata/generationMetadata.js +228 -0
- package/dist/infrastructure/metadata/generationMetadata.js.map +1 -0
- package/dist/infrastructure/monitoring/OrchestrationMetrics.d.ts +106 -0
- package/dist/infrastructure/monitoring/OrchestrationMetrics.d.ts.map +1 -0
- package/dist/infrastructure/monitoring/OrchestrationMetrics.js +456 -0
- package/dist/infrastructure/monitoring/OrchestrationMetrics.js.map +1 -0
- package/dist/infrastructure/monitoring/alertingSystem.d.ts +135 -0
- package/dist/infrastructure/monitoring/alertingSystem.d.ts.map +1 -0
- package/dist/infrastructure/monitoring/alertingSystem.js +549 -0
- package/dist/infrastructure/monitoring/alertingSystem.js.map +1 -0
- package/dist/infrastructure/optimization/performanceOptimizer.d.ts +89 -0
- package/dist/infrastructure/optimization/performanceOptimizer.d.ts.map +1 -0
- package/dist/infrastructure/optimization/performanceOptimizer.js +375 -0
- package/dist/infrastructure/optimization/performanceOptimizer.js.map +1 -0
- package/dist/infrastructure/security/AdvancedContentFilter.d.ts +99 -0
- package/dist/infrastructure/security/AdvancedContentFilter.d.ts.map +1 -0
- package/dist/infrastructure/security/AdvancedContentFilter.js +363 -0
- package/dist/infrastructure/security/AdvancedContentFilter.js.map +1 -0
- package/dist/infrastructure/security/MCPSecurityValidator.d.ts +62 -0
- package/dist/infrastructure/security/MCPSecurityValidator.d.ts.map +1 -0
- package/dist/infrastructure/security/MCPSecurityValidator.js +129 -0
- package/dist/infrastructure/security/MCPSecurityValidator.js.map +1 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddleware.d.ts +304 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddleware.d.ts.map +1 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddleware.js +61 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddleware.js.map +1 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.d.ts +62 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.d.ts.map +1 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.js +591 -0
- package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.js.map +1 -0
- package/dist/infrastructure/security/SecureMCPClient.d.ts +154 -0
- package/dist/infrastructure/security/SecureMCPClient.d.ts.map +1 -0
- package/dist/infrastructure/security/SecureMCPClient.js +292 -0
- package/dist/infrastructure/security/SecureMCPClient.js.map +1 -0
- package/dist/infrastructure/security/SecurityIncidentManager.d.ts +142 -0
- package/dist/infrastructure/security/SecurityIncidentManager.d.ts.map +1 -0
- package/dist/infrastructure/security/SecurityIncidentManager.js +260 -0
- package/dist/infrastructure/security/SecurityIncidentManager.js.map +1 -0
- package/dist/infrastructure/security/apiKeyManager.d.ts +297 -0
- package/dist/infrastructure/security/apiKeyManager.d.ts.map +1 -0
- package/dist/infrastructure/security/apiKeyManager.js +254 -0
- package/dist/infrastructure/security/apiKeyManager.js.map +1 -0
- package/dist/infrastructure/security/dataSanitizer.d.ts +157 -0
- package/dist/infrastructure/security/dataSanitizer.d.ts.map +1 -0
- package/dist/infrastructure/security/dataSanitizer.js +525 -0
- package/dist/infrastructure/security/dataSanitizer.js.map +1 -0
- package/dist/infrastructure/validation/inputValidator.d.ts +54 -0
- package/dist/infrastructure/validation/inputValidator.d.ts.map +1 -0
- package/dist/infrastructure/validation/inputValidator.js +362 -0
- package/dist/infrastructure/validation/inputValidator.js.map +1 -0
- package/dist/integration/parameterOptimizer.d.ts +69 -0
- package/dist/integration/parameterOptimizer.d.ts.map +1 -0
- package/dist/integration/parameterOptimizer.js +317 -0
- package/dist/integration/parameterOptimizer.js.map +1 -0
- package/dist/integration/twoStageProcessor.d.ts +66 -0
- package/dist/integration/twoStageProcessor.d.ts.map +1 -0
- package/dist/integration/twoStageProcessor.js +348 -0
- package/dist/integration/twoStageProcessor.js.map +1 -0
- package/dist/server/handlers/structuredPromptHandler.d.ts +65 -0
- package/dist/server/handlers/structuredPromptHandler.d.ts.map +1 -0
- package/dist/server/handlers/structuredPromptHandler.js +314 -0
- package/dist/server/handlers/structuredPromptHandler.js.map +1 -0
- package/dist/server/mcpServer.d.ts +16 -35
- package/dist/server/mcpServer.d.ts.map +1 -1
- package/dist/server/mcpServer.js +111 -150
- package/dist/server/mcpServer.js.map +1 -1
- package/dist/server/mcpServerWithOrchestration.d.ts +98 -0
- package/dist/server/mcpServerWithOrchestration.d.ts.map +1 -0
- package/dist/server/mcpServerWithOrchestration.js +284 -0
- package/dist/server/mcpServerWithOrchestration.js.map +1 -0
- package/dist/types/mcpOrchestrationTypes.d.ts +135 -0
- package/dist/types/mcpOrchestrationTypes.d.ts.map +1 -0
- package/dist/types/mcpOrchestrationTypes.js +28 -0
- package/dist/types/mcpOrchestrationTypes.js.map +1 -0
- package/dist/types/multiImageTypes.d.ts +328 -0
- package/dist/types/multiImageTypes.d.ts.map +1 -0
- package/dist/types/multiImageTypes.js +27 -0
- package/dist/types/multiImageTypes.js.map +1 -0
- package/dist/types/performanceTypes.d.ts +300 -0
- package/dist/types/performanceTypes.d.ts.map +1 -0
- package/dist/types/performanceTypes.js +50 -0
- package/dist/types/performanceTypes.js.map +1 -0
- package/dist/types/twoStageTypes.d.ts +123 -0
- package/dist/types/twoStageTypes.d.ts.map +1 -0
- package/dist/types/twoStageTypes.js +7 -0
- package/dist/types/twoStageTypes.js.map +1 -0
- package/dist/utils/config.d.ts +1 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +1 -0
- package/dist/utils/config.js.map +1 -1
- package/package.json +11 -4
- package/vitest.config.mjs +0 -47
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real MCP Sampling Client Implementation
|
|
3
|
+
* Server-side implementation that uses existing MCP connection
|
|
4
|
+
* Follows ADR-0003 specification for MCP Sampling
|
|
5
|
+
*/
|
|
6
|
+
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
|
+
import type { MCPSamplingClient, MCPSamplingConfig, MCPSamplingResult } from '../../business/__tests__/mocks/mcpSamplingClient.mock';
|
|
8
|
+
/**
|
|
9
|
+
* Real MCP Sampling Client for production use
|
|
10
|
+
* Uses existing MCP Server connection for sampling requests
|
|
11
|
+
*/
|
|
12
|
+
export declare class RealMCPSamplingClient implements MCPSamplingClient {
|
|
13
|
+
private securityValidator;
|
|
14
|
+
private config;
|
|
15
|
+
private server;
|
|
16
|
+
constructor(config: MCPSamplingConfig);
|
|
17
|
+
/**
|
|
18
|
+
* Set the MCP Server instance for sampling requests
|
|
19
|
+
* Should be called after MCPServerImpl initialization
|
|
20
|
+
* @param server - The MCP Server instance from MCPServerImpl
|
|
21
|
+
*/
|
|
22
|
+
setServer(server: Server): void;
|
|
23
|
+
/**
|
|
24
|
+
* Refine prompt using real MCP sampling
|
|
25
|
+
*/
|
|
26
|
+
refinePrompt(prompt: string): Promise<MCPSamplingResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Execute real MCP request using Server instance
|
|
29
|
+
*/
|
|
30
|
+
private executeMCPRequest;
|
|
31
|
+
/**
|
|
32
|
+
* Build enhancement prompt for LLM
|
|
33
|
+
* Based on Gemini 2.5 Flash Image best practices from Design Doc
|
|
34
|
+
*/
|
|
35
|
+
private buildEnhancementPrompt;
|
|
36
|
+
/**
|
|
37
|
+
* Create fallback result
|
|
38
|
+
*/
|
|
39
|
+
private createFallbackResult;
|
|
40
|
+
/**
|
|
41
|
+
* Check availability
|
|
42
|
+
*/
|
|
43
|
+
isAvailable(): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Cleanup resources
|
|
46
|
+
* Note: Server lifecycle is managed by MCPServerImpl, not here
|
|
47
|
+
*/
|
|
48
|
+
disconnect(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Build assessment prompt for testing purposes
|
|
51
|
+
* Public for compatibility, but not part of the interface
|
|
52
|
+
*/
|
|
53
|
+
buildAssessmentPrompt(originalPrompt: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* Assess prompt complexity
|
|
56
|
+
*/
|
|
57
|
+
private assessComplexity;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=RealMCPSamplingClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RealMCPSamplingClient.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/mcp/RealMCPSamplingClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,uDAAuD,CAAA;AAG9D;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,iBAAiB;IAKrC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiC9D;;OAEG;YACW,iBAAiB;IAuF/B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAyD9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;;OAGG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAoBrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAczB"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Real MCP Sampling Client Implementation
|
|
4
|
+
* Server-side implementation that uses existing MCP connection
|
|
5
|
+
* Follows ADR-0003 specification for MCP Sampling
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.RealMCPSamplingClient = void 0;
|
|
9
|
+
const MCPSecurityValidator_1 = require("../security/MCPSecurityValidator");
|
|
10
|
+
/**
|
|
11
|
+
* Real MCP Sampling Client for production use
|
|
12
|
+
* Uses existing MCP Server connection for sampling requests
|
|
13
|
+
*/
|
|
14
|
+
class RealMCPSamplingClient {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.server = null;
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.securityValidator = new MCPSecurityValidator_1.MCPSecurityValidator();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Set the MCP Server instance for sampling requests
|
|
22
|
+
* Should be called after MCPServerImpl initialization
|
|
23
|
+
* @param server - The MCP Server instance from MCPServerImpl
|
|
24
|
+
*/
|
|
25
|
+
setServer(server) {
|
|
26
|
+
this.server = server;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Refine prompt using real MCP sampling
|
|
30
|
+
*/
|
|
31
|
+
async refinePrompt(prompt) {
|
|
32
|
+
const startTime = Date.now();
|
|
33
|
+
// Check if server is set
|
|
34
|
+
if (!this.server) {
|
|
35
|
+
if (this.config.enableLogging) {
|
|
36
|
+
console.warn('MCP Server not initialized, using fallback');
|
|
37
|
+
}
|
|
38
|
+
return this.createFallbackResult(prompt, startTime);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
// Security validation
|
|
42
|
+
try {
|
|
43
|
+
this.securityValidator.validateRequest({
|
|
44
|
+
method: 'sampling/createMessage',
|
|
45
|
+
params: { prompt },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (validationError) {
|
|
49
|
+
return this.createFallbackResult(prompt, startTime);
|
|
50
|
+
}
|
|
51
|
+
// Real MCP request with timeout
|
|
52
|
+
const result = await this.executeMCPRequest(prompt, startTime);
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (this.config.enableLogging) {
|
|
57
|
+
console.error('MCP sampling failed:', error);
|
|
58
|
+
}
|
|
59
|
+
return this.createFallbackResult(prompt, startTime);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Execute real MCP request using Server instance
|
|
64
|
+
*/
|
|
65
|
+
async executeMCPRequest(prompt, startTime) {
|
|
66
|
+
if (!this.server) {
|
|
67
|
+
throw new Error('Server not initialized');
|
|
68
|
+
}
|
|
69
|
+
const timeoutId = setTimeout(() => {
|
|
70
|
+
throw new Error('MCP Sampling timeout');
|
|
71
|
+
}, this.config.timeout);
|
|
72
|
+
try {
|
|
73
|
+
const samplingRequest = {
|
|
74
|
+
jsonrpc: '2.0',
|
|
75
|
+
id: crypto.randomUUID(),
|
|
76
|
+
method: 'sampling/createMessage',
|
|
77
|
+
params: {
|
|
78
|
+
messages: [
|
|
79
|
+
{
|
|
80
|
+
role: 'user',
|
|
81
|
+
content: {
|
|
82
|
+
type: 'text',
|
|
83
|
+
text: this.buildEnhancementPrompt(prompt),
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
modelPreferences: {
|
|
88
|
+
hints: [{ name: 'claude-3-sonnet' }],
|
|
89
|
+
intelligencePriority: 0.8,
|
|
90
|
+
speedPriority: 0.5,
|
|
91
|
+
},
|
|
92
|
+
systemPrompt: 'You are an expert at enhancing image generation prompts.',
|
|
93
|
+
maxTokens: 800,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
// Use the existing server connection to request sampling
|
|
97
|
+
const response = await Promise.race([
|
|
98
|
+
this.server.request(samplingRequest),
|
|
99
|
+
new Promise((_, reject) => {
|
|
100
|
+
setTimeout(() => reject(new Error('Timeout')), this.config.timeout);
|
|
101
|
+
}),
|
|
102
|
+
]);
|
|
103
|
+
clearTimeout(timeoutId);
|
|
104
|
+
// Parse response
|
|
105
|
+
const responseText = response?.result?.content?.text || '';
|
|
106
|
+
let enhancedPrompt = prompt;
|
|
107
|
+
let confidence = 0.8;
|
|
108
|
+
let appliedRules = [];
|
|
109
|
+
try {
|
|
110
|
+
const parsed = JSON.parse(responseText);
|
|
111
|
+
enhancedPrompt = parsed.enhancedPrompt || prompt;
|
|
112
|
+
confidence = parsed.confidenceScore || 0.8;
|
|
113
|
+
appliedRules = parsed.appliedRules || [];
|
|
114
|
+
if (this.config.enableLogging) {
|
|
115
|
+
console.debug('MCP Sampling successful:', {
|
|
116
|
+
appliedRules,
|
|
117
|
+
confidence,
|
|
118
|
+
reasoning: parsed.reasoning
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Use text as-is if not JSON
|
|
124
|
+
enhancedPrompt = responseText || prompt;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
refinedPrompt: enhancedPrompt,
|
|
128
|
+
success: true,
|
|
129
|
+
processingTime: Date.now() - startTime,
|
|
130
|
+
metadata: {
|
|
131
|
+
model: 'claude-3-sonnet',
|
|
132
|
+
iterations: 1,
|
|
133
|
+
confidence,
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
clearTimeout(timeoutId);
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Build enhancement prompt for LLM
|
|
144
|
+
* Based on Gemini 2.5 Flash Image best practices from Design Doc
|
|
145
|
+
*/
|
|
146
|
+
buildEnhancementPrompt(prompt) {
|
|
147
|
+
return `You are an expert image prompt engineer. Enhance the following prompt for Gemini 2.5 Flash Image using these specific techniques:
|
|
148
|
+
|
|
149
|
+
ORIGINAL PROMPT: "${prompt}"
|
|
150
|
+
|
|
151
|
+
APPLY THESE 7 TECHNIQUES (check each that applies):
|
|
152
|
+
|
|
153
|
+
1. **HYPER-SPECIFIC DETAILS**
|
|
154
|
+
- Replace vague terms with precise descriptions
|
|
155
|
+
- Add material, texture, color specifications
|
|
156
|
+
- Include specific architectural/design elements
|
|
157
|
+
- Example: "fantasy armor" → "ornate elven plate armor, etched with silver leaf patterns, high collar, falcon-wing pauldrons"
|
|
158
|
+
|
|
159
|
+
2. **CHARACTER CONSISTENCY**
|
|
160
|
+
- Add consistent physical feature descriptions
|
|
161
|
+
- Specify facial characteristics, build, age
|
|
162
|
+
- Include clothing/accessory details for recognition
|
|
163
|
+
- Use "maintaining consistent [feature] throughout" phrasing
|
|
164
|
+
|
|
165
|
+
3. **CONTEXT AND PURPOSE**
|
|
166
|
+
- State the image's intended use clearly
|
|
167
|
+
- Add environmental context
|
|
168
|
+
- Specify mood, atmosphere, or emotional tone
|
|
169
|
+
- Include time period, setting, or cultural context
|
|
170
|
+
|
|
171
|
+
4. **REFINEMENT-FRIENDLY STRUCTURE**
|
|
172
|
+
- Use clear, comma-separated descriptive phrases
|
|
173
|
+
- Avoid run-on sentences or complex nested clauses
|
|
174
|
+
- Structure for easy modification of individual elements
|
|
175
|
+
- Front-load the most important visual elements
|
|
176
|
+
|
|
177
|
+
5. **POSITIVE PHRASING (NO NEGATIVES)**
|
|
178
|
+
- Never use "no," "not," "without," "don't"
|
|
179
|
+
- Describe what IS desired instead of what isn't
|
|
180
|
+
- Example: "no cars" → "empty cobblestone street, peaceful pedestrian walkway"
|
|
181
|
+
|
|
182
|
+
6. **ASPECT RATIO OPTIMIZATION**
|
|
183
|
+
- Add dimensions if not specified: portrait (3:4), landscape (16:9), square (1:1)
|
|
184
|
+
- Match ratio to content type (portrait for people, landscape for vistas)
|
|
185
|
+
|
|
186
|
+
7. **PHOTOGRAPHIC CONTROL**
|
|
187
|
+
- Add specific lens types: 85mm portrait, wide-angle, macro
|
|
188
|
+
- Include lighting: golden hour, studio lighting, natural light
|
|
189
|
+
- Specify angle: low-angle, bird's eye view, eye-level
|
|
190
|
+
- Add composition terms: rule of thirds, centered, dynamic angle
|
|
191
|
+
|
|
192
|
+
RESPOND IN EXACTLY THIS JSON FORMAT:
|
|
193
|
+
{
|
|
194
|
+
"enhancedPrompt": "[COMPLETE enhanced prompt - be thorough and specific]",
|
|
195
|
+
"appliedRules": ["List each rule number you applied (1-7)"],
|
|
196
|
+
"confidenceScore": [0.0-1.0 confidence in improvement],
|
|
197
|
+
"reasoning": "[Explain the 2-3 most impactful changes made]"
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
PRIORITIZE: Concrete visual details that will directly improve image generation quality.`;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Create fallback result
|
|
204
|
+
*/
|
|
205
|
+
createFallbackResult(prompt, startTime) {
|
|
206
|
+
return {
|
|
207
|
+
refinedPrompt: prompt,
|
|
208
|
+
success: false,
|
|
209
|
+
processingTime: Date.now() - startTime,
|
|
210
|
+
metadata: {
|
|
211
|
+
model: 'fallback',
|
|
212
|
+
iterations: 0,
|
|
213
|
+
confidence: 0,
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check availability
|
|
219
|
+
*/
|
|
220
|
+
async isAvailable() {
|
|
221
|
+
// Server-side implementation: check if server is set
|
|
222
|
+
return this.server !== null;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Cleanup resources
|
|
226
|
+
* Note: Server lifecycle is managed by MCPServerImpl, not here
|
|
227
|
+
*/
|
|
228
|
+
async disconnect() {
|
|
229
|
+
// No action needed - server is managed externally
|
|
230
|
+
this.server = null;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Build assessment prompt for testing purposes
|
|
234
|
+
* Public for compatibility, but not part of the interface
|
|
235
|
+
*/
|
|
236
|
+
buildAssessmentPrompt(originalPrompt) {
|
|
237
|
+
const complexity = this.assessComplexity(originalPrompt);
|
|
238
|
+
return `Assessment for AI execution accuracy maximization:
|
|
239
|
+
|
|
240
|
+
Original prompt: ${originalPrompt}
|
|
241
|
+
|
|
242
|
+
Assessment criteria:
|
|
243
|
+
- Execution accuracy: Verify that generated content precisely matches requirements
|
|
244
|
+
- Quality metrics: Evaluate technical precision, clarity, and completeness
|
|
245
|
+
- Complexity: ${complexity}
|
|
246
|
+
- Technical requirements: ${complexity === 'high' ? 'Detailed specifications, precision factors, advanced techniques' : 'Standard quality checks, basic validation'}
|
|
247
|
+
|
|
248
|
+
Enhancement objectives:
|
|
249
|
+
- Maximize output reliability and consistency
|
|
250
|
+
- Ensure technical accuracy and specification compliance
|
|
251
|
+
- Optimize for intended use case and context
|
|
252
|
+
- Apply best practices for ${complexity}-complexity scenarios`;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Assess prompt complexity
|
|
256
|
+
*/
|
|
257
|
+
assessComplexity(prompt) {
|
|
258
|
+
const technicalTerms = /(?:detailed|precise|accurate|specific|technical|architectural|rendering|photorealistic|professional)/gi;
|
|
259
|
+
const complexityIndicators = /(?:lighting|shadows|materials|composition|advanced|multiple|complex|intricate)/gi;
|
|
260
|
+
const technicalMatches = (prompt.match(technicalTerms) || []).length;
|
|
261
|
+
const complexityMatches = (prompt.match(complexityIndicators) || []).length;
|
|
262
|
+
const totalIndicators = technicalMatches + complexityMatches;
|
|
263
|
+
if (totalIndicators >= 4 || prompt.length > 200)
|
|
264
|
+
return 'high';
|
|
265
|
+
if (totalIndicators >= 2 || prompt.length > 100)
|
|
266
|
+
return 'medium';
|
|
267
|
+
return 'low';
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
exports.RealMCPSamplingClient = RealMCPSamplingClient;
|
|
271
|
+
//# sourceMappingURL=RealMCPSamplingClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RealMCPSamplingClient.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/RealMCPSamplingClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata management system for 2-stage processing
|
|
3
|
+
* Handles session tracking, stage recording, and performance metrics
|
|
4
|
+
*/
|
|
5
|
+
import type { ProcessingMetadata, StageMetadata } from '../../types/twoStageTypes';
|
|
6
|
+
/**
|
|
7
|
+
* Metadata manager for generation sessions
|
|
8
|
+
*/
|
|
9
|
+
export declare class GenerationMetadataManager {
|
|
10
|
+
private sessions;
|
|
11
|
+
private sessionCounter;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new processing session
|
|
14
|
+
*/
|
|
15
|
+
createSession(originalPrompt: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Record a processing stage
|
|
18
|
+
*/
|
|
19
|
+
recordStage(sessionId: string, stage: Omit<StageMetadata, 'startTime'>): void;
|
|
20
|
+
/**
|
|
21
|
+
* Mark a stage as completed
|
|
22
|
+
*/
|
|
23
|
+
completeStage(sessionId: string, stageName: string, outputData?: unknown): void;
|
|
24
|
+
/**
|
|
25
|
+
* Mark a stage as failed
|
|
26
|
+
*/
|
|
27
|
+
failStage(sessionId: string, stageName: string, error: Error): void;
|
|
28
|
+
/**
|
|
29
|
+
* Record applied optimizations
|
|
30
|
+
*/
|
|
31
|
+
recordOptimization(sessionId: string, optimization: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Mark fallback as used
|
|
34
|
+
*/
|
|
35
|
+
recordFallback(sessionId: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Complete a session and calculate final metrics
|
|
38
|
+
*/
|
|
39
|
+
completeSession(sessionId: string): ProcessingMetadata | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Get current session metadata
|
|
42
|
+
*/
|
|
43
|
+
getSession(sessionId: string): ProcessingMetadata | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Clean up old inactive sessions (memory management)
|
|
46
|
+
*/
|
|
47
|
+
cleanup(maxAge?: number): number;
|
|
48
|
+
/**
|
|
49
|
+
* Get statistics for monitoring and observability
|
|
50
|
+
*/
|
|
51
|
+
getStatistics(): {
|
|
52
|
+
activeSessions: number;
|
|
53
|
+
totalSessions: number;
|
|
54
|
+
averageProcessingTime: number;
|
|
55
|
+
successRate: number;
|
|
56
|
+
fallbackRate: number;
|
|
57
|
+
performanceMetrics: {
|
|
58
|
+
averagePromptTime: number;
|
|
59
|
+
averageImageTime: number;
|
|
60
|
+
timeoutCount: number;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Generate unique session ID
|
|
65
|
+
*/
|
|
66
|
+
private generateSessionId;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Global metadata manager instance
|
|
70
|
+
*/
|
|
71
|
+
export declare const globalMetadataManager: GenerationMetadataManager;
|
|
72
|
+
//# sourceMappingURL=generationMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generationMetadata.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/metadata/generationMetadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AASlF;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,cAAc,CAAI;IAE1B;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAoB7C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,IAAI;IAc7E;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI;IA8B/E;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAenE;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAOjE;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOvC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IA4BlE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAmB7D;;OAEG;IACH,OAAO,CAAC,MAAM,SAAU,GAAG,MAAM;IAejC;;OAEG;IACH,aAAa,IAAI;QACf,cAAc,EAAE,MAAM,CAAA;QACtB,aAAa,EAAE,MAAM,CAAA;QACrB,qBAAqB,EAAE,MAAM,CAAA;QAC7B,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;QACpB,kBAAkB,EAAE;YAClB,iBAAiB,EAAE,MAAM,CAAA;YACzB,gBAAgB,EAAE,MAAM,CAAA;YACxB,YAAY,EAAE,MAAM,CAAA;SACrB,CAAA;KACF;IAsDD;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAO1B;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,2BAAkC,CAAA"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Metadata management system for 2-stage processing
|
|
4
|
+
* Handles session tracking, stage recording, and performance metrics
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.globalMetadataManager = exports.GenerationMetadataManager = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Metadata manager for generation sessions
|
|
10
|
+
*/
|
|
11
|
+
class GenerationMetadataManager {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.sessions = new Map();
|
|
14
|
+
this.sessionCounter = 0;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a new processing session
|
|
18
|
+
*/
|
|
19
|
+
createSession(originalPrompt) {
|
|
20
|
+
const sessionId = this.generateSessionId();
|
|
21
|
+
const session = {
|
|
22
|
+
sessionId,
|
|
23
|
+
originalPrompt,
|
|
24
|
+
stages: [],
|
|
25
|
+
totalProcessingTime: 0,
|
|
26
|
+
promptEnhancementTime: 0,
|
|
27
|
+
imageGenerationTime: 0,
|
|
28
|
+
appliedOptimizations: [],
|
|
29
|
+
fallbackUsed: false,
|
|
30
|
+
timestamp: new Date(),
|
|
31
|
+
active: true,
|
|
32
|
+
};
|
|
33
|
+
this.sessions.set(sessionId, session);
|
|
34
|
+
return sessionId;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Record a processing stage
|
|
38
|
+
*/
|
|
39
|
+
recordStage(sessionId, stage) {
|
|
40
|
+
const session = this.sessions.get(sessionId);
|
|
41
|
+
if (!session || !session.active) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const stageWithTimestamp = {
|
|
45
|
+
...stage,
|
|
46
|
+
startTime: new Date(),
|
|
47
|
+
};
|
|
48
|
+
session.stages.push(stageWithTimestamp);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Mark a stage as completed
|
|
52
|
+
*/
|
|
53
|
+
completeStage(sessionId, stageName, outputData) {
|
|
54
|
+
const session = this.sessions.get(sessionId);
|
|
55
|
+
if (!session || !session.active) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const stage = session.stages.find((s) => s.stageName === stageName && s.status === 'processing');
|
|
59
|
+
if (stage) {
|
|
60
|
+
stage.status = 'completed';
|
|
61
|
+
stage.endTime = new Date();
|
|
62
|
+
stage.processingTime = stage.endTime.getTime() - stage.startTime.getTime();
|
|
63
|
+
stage.outputData = outputData;
|
|
64
|
+
// Update session timing based on stage
|
|
65
|
+
if (stage.processingTime) {
|
|
66
|
+
switch (stageName) {
|
|
67
|
+
case 'Structured Prompt Generation':
|
|
68
|
+
case 'POML Template Structuring':
|
|
69
|
+
case 'Best Practices Enhancement':
|
|
70
|
+
session.promptEnhancementTime += stage.processingTime;
|
|
71
|
+
break;
|
|
72
|
+
case 'Image Generation':
|
|
73
|
+
case 'Fallback Image Generation':
|
|
74
|
+
session.imageGenerationTime += stage.processingTime;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Mark a stage as failed
|
|
82
|
+
*/
|
|
83
|
+
failStage(sessionId, stageName, error) {
|
|
84
|
+
const session = this.sessions.get(sessionId);
|
|
85
|
+
if (!session || !session.active) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const stage = session.stages.find((s) => s.stageName === stageName && s.status === 'processing');
|
|
89
|
+
if (stage) {
|
|
90
|
+
stage.status = 'failed';
|
|
91
|
+
stage.endTime = new Date();
|
|
92
|
+
stage.processingTime = stage.endTime.getTime() - stage.startTime.getTime();
|
|
93
|
+
stage.error = error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Record applied optimizations
|
|
98
|
+
*/
|
|
99
|
+
recordOptimization(sessionId, optimization) {
|
|
100
|
+
const session = this.sessions.get(sessionId);
|
|
101
|
+
if (session?.active) {
|
|
102
|
+
session.appliedOptimizations.push(optimization);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Mark fallback as used
|
|
107
|
+
*/
|
|
108
|
+
recordFallback(sessionId) {
|
|
109
|
+
const session = this.sessions.get(sessionId);
|
|
110
|
+
if (session?.active) {
|
|
111
|
+
session.fallbackUsed = true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Complete a session and calculate final metrics
|
|
116
|
+
*/
|
|
117
|
+
completeSession(sessionId) {
|
|
118
|
+
const session = this.sessions.get(sessionId);
|
|
119
|
+
if (!session || !session.active) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
// Calculate total processing time
|
|
123
|
+
session.totalProcessingTime = session.promptEnhancementTime + session.imageGenerationTime;
|
|
124
|
+
// Mark session as inactive
|
|
125
|
+
session.active = false;
|
|
126
|
+
// Return immutable copy
|
|
127
|
+
const metadata = {
|
|
128
|
+
sessionId: session.sessionId,
|
|
129
|
+
originalPrompt: session.originalPrompt,
|
|
130
|
+
stages: [...session.stages],
|
|
131
|
+
totalProcessingTime: session.totalProcessingTime,
|
|
132
|
+
promptEnhancementTime: session.promptEnhancementTime,
|
|
133
|
+
imageGenerationTime: session.imageGenerationTime,
|
|
134
|
+
appliedOptimizations: [...session.appliedOptimizations],
|
|
135
|
+
fallbackUsed: session.fallbackUsed,
|
|
136
|
+
timestamp: session.timestamp,
|
|
137
|
+
};
|
|
138
|
+
return metadata;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get current session metadata
|
|
142
|
+
*/
|
|
143
|
+
getSession(sessionId) {
|
|
144
|
+
const session = this.sessions.get(sessionId);
|
|
145
|
+
if (!session) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
sessionId: session.sessionId,
|
|
150
|
+
originalPrompt: session.originalPrompt,
|
|
151
|
+
stages: [...session.stages],
|
|
152
|
+
totalProcessingTime: session.totalProcessingTime,
|
|
153
|
+
promptEnhancementTime: session.promptEnhancementTime,
|
|
154
|
+
imageGenerationTime: session.imageGenerationTime,
|
|
155
|
+
appliedOptimizations: [...session.appliedOptimizations],
|
|
156
|
+
fallbackUsed: session.fallbackUsed,
|
|
157
|
+
timestamp: session.timestamp,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Clean up old inactive sessions (memory management)
|
|
162
|
+
*/
|
|
163
|
+
cleanup(maxAge = 3600000) {
|
|
164
|
+
// Default 1 hour
|
|
165
|
+
const now = Date.now();
|
|
166
|
+
let cleaned = 0;
|
|
167
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
168
|
+
if (!session.active && now - session.timestamp.getTime() > maxAge) {
|
|
169
|
+
this.sessions.delete(sessionId);
|
|
170
|
+
cleaned++;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return cleaned;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get statistics for monitoring and observability
|
|
177
|
+
*/
|
|
178
|
+
getStatistics() {
|
|
179
|
+
const sessions = Array.from(this.sessions.values());
|
|
180
|
+
const activeSessions = sessions.filter((s) => s.active).length;
|
|
181
|
+
const completedSessions = sessions.filter((s) => !s.active);
|
|
182
|
+
const averageProcessingTime = completedSessions.length > 0
|
|
183
|
+
? completedSessions.reduce((sum, s) => sum + s.totalProcessingTime, 0) /
|
|
184
|
+
completedSessions.length
|
|
185
|
+
: 0;
|
|
186
|
+
const successfulSessions = completedSessions.filter((s) => s.stages.some((stage) => stage.status === 'completed' && stage.stageName === 'Image Generation')).length;
|
|
187
|
+
const successRate = completedSessions.length > 0 ? successfulSessions / completedSessions.length : 0;
|
|
188
|
+
const fallbackSessions = completedSessions.filter((s) => s.fallbackUsed).length;
|
|
189
|
+
const fallbackRate = completedSessions.length > 0 ? fallbackSessions / completedSessions.length : 0;
|
|
190
|
+
const averagePromptTime = completedSessions.length > 0
|
|
191
|
+
? completedSessions.reduce((sum, s) => sum + s.promptEnhancementTime, 0) /
|
|
192
|
+
completedSessions.length
|
|
193
|
+
: 0;
|
|
194
|
+
const averageImageTime = completedSessions.length > 0
|
|
195
|
+
? completedSessions.reduce((sum, s) => sum + s.imageGenerationTime, 0) /
|
|
196
|
+
completedSessions.length
|
|
197
|
+
: 0;
|
|
198
|
+
const timeoutSessions = completedSessions.filter((s) => s.appliedOptimizations.some((opt) => opt.includes('performance target exceeded'))).length;
|
|
199
|
+
return {
|
|
200
|
+
activeSessions,
|
|
201
|
+
totalSessions: sessions.length,
|
|
202
|
+
averageProcessingTime,
|
|
203
|
+
successRate,
|
|
204
|
+
fallbackRate,
|
|
205
|
+
performanceMetrics: {
|
|
206
|
+
averagePromptTime,
|
|
207
|
+
averageImageTime,
|
|
208
|
+
timeoutCount: timeoutSessions,
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Generate unique session ID
|
|
214
|
+
*/
|
|
215
|
+
generateSessionId() {
|
|
216
|
+
this.sessionCounter++;
|
|
217
|
+
const timestamp = Date.now().toString(36);
|
|
218
|
+
const counter = this.sessionCounter.toString(36);
|
|
219
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
220
|
+
return `2stage-${timestamp}-${counter}-${random}`;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.GenerationMetadataManager = GenerationMetadataManager;
|
|
224
|
+
/**
|
|
225
|
+
* Global metadata manager instance
|
|
226
|
+
*/
|
|
227
|
+
exports.globalMetadataManager = new GenerationMetadataManager();
|
|
228
|
+
//# sourceMappingURL=generationMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generationMetadata.js","sourceRoot":"","sources":["../../../src/infrastructure/metadata/generationMetadata.ts"],"names":[],"mappings":"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"}
|