@tehreet/conduit
Version:
LLM API gateway with intelligent routing, robust process management, and health monitoring
224 lines • 7.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContextExtractor = void 0;
class ContextExtractor {
/**
* Extract Synapse context from environment variables
*/
static extractSynapseContext(env) {
return {
projectId: env.SYNAPSE_PROJECT_ID,
agentId: env.SYNAPSE_AGENT_ID,
agentType: env.SYNAPSE_AGENT_TYPE,
projectModelConfig: env.SYNAPSE_PROJECT_MODEL_CONFIG,
agentModelConfig: env.SYNAPSE_AGENT_MODEL_CONFIG,
workspaceId: env.SYNAPSE_WORKSPACE_ID,
userId: env.SYNAPSE_USER_ID,
sessionId: env.SYNAPSE_SESSION_ID,
requestId: env.SYNAPSE_REQUEST_ID,
orgId: env.SYNAPSE_ORG_ID,
metadata: this.extractMetadata(env)
};
}
/**
* Extract Synapse context from environment variables (non-static)
*/
extractSynapseContext(env) {
return ContextExtractor.extractSynapseContext(env);
}
/**
* Parse project model configuration
*/
static parseProjectConfig(configString) {
if (!configString) {
return null;
}
try {
const config = JSON.parse(configString);
return {
enabled: config.enabled ?? true,
defaultModel: config.defaultModel,
fallbackModel: config.fallbackModel,
maxTokens: config.maxTokens,
costLimit: config.costLimit,
rateLimits: config.rateLimits
};
}
catch (error) {
console.warn('Failed to parse project config:', error);
return null;
}
}
/**
* Parse agent model configuration
*/
static parseAgentConfig(configString) {
if (!configString) {
return null;
}
try {
const config = JSON.parse(configString);
return {
useProjectDefaults: config.useProjectDefaults ?? true,
overrideModel: config.overrideModel,
maxTokens: config.maxTokens,
systemPrompt: config.systemPrompt,
temperature: config.temperature,
topP: config.topP,
reasoning: config.reasoning
};
}
catch (error) {
console.warn('Failed to parse agent config:', error);
return null;
}
}
/**
* Get effective model configuration
*/
static getEffectiveModelConfig(synapseContext) {
// Try agent config first
const agentConfig = this.parseAgentConfig(synapseContext.agentModelConfig);
if (agentConfig && !agentConfig.useProjectDefaults && agentConfig.overrideModel) {
return {
model: agentConfig.overrideModel,
source: 'agent',
config: agentConfig
};
}
// Fall back to project config
const projectConfig = this.parseProjectConfig(synapseContext.projectModelConfig);
if (projectConfig && projectConfig.enabled && projectConfig.defaultModel) {
return {
model: projectConfig.defaultModel,
source: 'project',
config: projectConfig
};
}
return {
model: undefined,
source: 'none',
config: null
};
}
/**
* Validate Synapse context
*/
static validateSynapseContext(context) {
const errors = [];
const warnings = [];
// Check required fields
if (!context.projectId && !context.agentId) {
errors.push('Either projectId or agentId must be provided');
}
// Validate project config if present
if (context.projectModelConfig) {
const projectConfig = this.parseProjectConfig(context.projectModelConfig);
if (!projectConfig) {
errors.push('Invalid project model configuration JSON');
}
else if (!projectConfig.enabled) {
warnings.push('Project model configuration is disabled');
}
}
// Validate agent config if present
if (context.agentModelConfig) {
const agentConfig = this.parseAgentConfig(context.agentModelConfig);
if (!agentConfig) {
errors.push('Invalid agent model configuration JSON');
}
}
return {
valid: errors.length === 0,
errors,
warnings
};
}
/**
* Extract additional metadata from environment
*/
static extractMetadata(env) {
const metadata = {};
// Extract any SYNAPSE_* environment variables
for (const [key, value] of Object.entries(env)) {
if (key.startsWith('SYNAPSE_') && value) {
const metadataKey = key.substring('SYNAPSE_'.length).toLowerCase();
// Skip known context fields
if (!['project_id', 'agent_id', 'agent_type', 'project_model_config', 'agent_model_config', 'workspace_id', 'user_id', 'session_id', 'request_id', 'org_id'].includes(metadataKey)) {
metadata[metadataKey] = value;
}
}
}
return metadata;
}
/**
* Create test context for development
*/
static createTestContext(overrides = {}) {
return {
projectId: 'test-project-123',
agentId: 'test-agent-456',
agentType: 'code-assistant',
projectModelConfig: JSON.stringify({
enabled: true,
defaultModel: 'anthropic/claude-3-5-sonnet-20241022',
fallbackModel: 'anthropic/claude-3-5-haiku-20241022',
maxTokens: 100000,
costLimit: 1.0
}),
agentModelConfig: JSON.stringify({
useProjectDefaults: false,
overrideModel: 'anthropic/claude-3-5-haiku-20241022',
maxTokens: 50000,
temperature: 0.7,
reasoning: true
}),
workspaceId: 'test-workspace-789',
userId: 'test-user-abc',
sessionId: 'test-session-def',
requestId: 'test-request-ghi',
orgId: 'test-org-jkl',
metadata: {
environment: 'test',
version: '1.0.0'
},
...overrides
};
}
/**
* Convert Synapse model format to Claude format
*/
static mapSynapseModelToClaude(synapseModel) {
// Remove 'anthropic/' prefix if present
if (synapseModel.startsWith('anthropic/')) {
return synapseModel.substring('anthropic/'.length);
}
// Handle other provider prefixes
if (synapseModel.startsWith('openai/')) {
return synapseModel.substring('openai/'.length);
}
if (synapseModel.startsWith('google/')) {
return synapseModel.substring('google/'.length);
}
return synapseModel;
}
/**
* Convert Claude model format to Synapse format
*/
static mapClaudeModelToSynapse(claudeModel) {
// Add 'anthropic/' prefix for Claude models
if (claudeModel.startsWith('claude-')) {
return `anthropic/${claudeModel}`;
}
// Add appropriate prefix for other models
if (claudeModel.startsWith('gpt-')) {
return `openai/${claudeModel}`;
}
if (claudeModel.startsWith('gemini-')) {
return `google/${claudeModel}`;
}
return claudeModel;
}
}
exports.ContextExtractor = ContextExtractor;
//# sourceMappingURL=context-extractor.js.map