route-claudecode
Version:
Advanced routing and transformation system for Claude Code outputs to multiple AI providers
95 lines • 3.45 kB
JavaScript
;
/**
* Anthropic Provider
* Direct integration with Anthropic's official API
* Project owner: Jason Zhang
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.AnthropicProvider = void 0;
const logger_1 = require("../../utils/logger");
const client_1 = require("./client");
class AnthropicProvider {
config;
name = 'anthropic';
type = 'anthropic';
client;
constructor(config) {
this.config = config;
if (config.type !== 'anthropic') {
throw new Error(`Invalid provider type: ${config.type}, expected 'anthropic'`);
}
this.client = new client_1.AnthropicClient(config);
logger_1.logger.info(`Initialized Anthropic provider: ${config.endpoint}`, {
provider: this.name,
endpoint: config.endpoint
});
}
async isHealthy() {
try {
return await this.client.healthCheck();
}
catch (error) {
logger_1.logger.error('Anthropic provider health check failed', {
provider: this.name,
error: error instanceof Error ? error.message : String(error)
});
return false;
}
}
async sendRequest(request) {
try {
logger_1.logger.trace(request.metadata?.requestId || 'unknown', 'provider', 'Sending request to Anthropic', {
provider: this.name,
model: request.model,
endpoint: this.config.endpoint
});
const response = await this.client.createMessage(request);
logger_1.logger.debug('Received response from Anthropic', {
provider: this.name,
model: response.model,
requestId: request.metadata?.requestId,
inputTokens: response.usage?.input_tokens,
outputTokens: response.usage?.output_tokens
});
return response;
}
catch (error) {
logger_1.logger.error('Anthropic API request failed', {
provider: this.name,
model: request.model,
requestId: request.metadata?.requestId,
error: error instanceof Error ? error.message : String(error)
});
throw error;
}
}
async *sendStreamRequest(request) {
try {
logger_1.logger.debug('Starting streaming request to Anthropic', {
provider: this.name,
model: request.model,
requestId: request.metadata?.requestId
});
const stream = this.client.streamMessage(request);
for await (const chunk of stream) {
yield chunk;
}
logger_1.logger.debug('Completed streaming request to Anthropic', {
provider: this.name,
model: request.model,
requestId: request.metadata?.requestId
});
}
catch (error) {
logger_1.logger.error('Anthropic streaming request failed', {
provider: this.name,
model: request.model,
requestId: request.metadata?.requestId,
error: error instanceof Error ? error.message : String(error)
});
throw error;
}
}
}
exports.AnthropicProvider = AnthropicProvider;
//# sourceMappingURL=index.js.map