@kdump/code-cli-any-llm
Version:
> A unified gateway for the Gemini, opencode, crush, and Qwen Code AI CLIs
135 lines • 5.56 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResponseTransformer = void 0;
const common_1 = require("@nestjs/common");
const ToolCallProcessor_1 = require("../utils/zhipu/ToolCallProcessor");
let ResponseTransformer = class ResponseTransformer {
toolCallProcessor = new ToolCallProcessor_1.ToolCallProcessor();
transformResponse(openAIResponse) {
const geminiResponse = {
candidates: [],
};
if (openAIResponse.choices && openAIResponse.choices.length > 0) {
geminiResponse.candidates = openAIResponse.choices.map((choice, index) => this.transformChoice(choice, index));
}
if (openAIResponse.usage) {
geminiResponse.usageMetadata = this.transformUsage(openAIResponse.usage);
}
return geminiResponse;
}
transformChoice(choice, index) {
const content = this.transformOpenAIMessageToGeminiContent(choice.message);
return {
content,
index,
finishReason: this.transformFinishReason(choice.finish_reason),
};
}
transformOpenAIMessageToGeminiContent(message) {
const parts = [];
const messageObj = message;
if (messageObj.reasoning_content) {
parts.push({
text: messageObj.reasoning_content,
thought: true,
});
}
if (messageObj.content) {
parts.push({ text: messageObj.content });
}
if (messageObj.tool_calls && messageObj.tool_calls.length > 0) {
for (const toolCall of messageObj.tool_calls) {
const args = this.toolCallProcessor.parseToolCallArguments(toolCall.function.arguments, toolCall.function.name, 'qwen');
parts.push({
functionCall: {
id: toolCall.id,
name: toolCall.function.name,
args: args,
},
});
}
}
const normalizedParts = this.toolCallProcessor.normalizeTextToolCalls(parts);
parts.splice(0, parts.length, ...normalizedParts);
if (parts.length === 0 &&
(messageObj.content ||
messageObj.reasoning_content ||
messageObj.tool_calls)) {
parts.push({ text: '' });
}
return {
role: 'model',
parts,
};
}
transformFinishReason(reason) {
const mapping = {
stop: 'STOP',
length: 'MAX_TOKENS',
tool_calls: 'STOP',
content_filter: 'SAFETY',
};
return mapping[reason] || 'OTHER';
}
transformUsage(usage) {
const usageObj = usage;
return {
promptTokenCount: usageObj.prompt_tokens || 0,
candidatesTokenCount: usageObj.completion_tokens || 0,
totalTokenCount: usageObj.total_tokens || 0,
};
}
transformStreamChunk(chunk) {
const geminiResponse = {
candidates: [],
};
const chunkObj = chunk;
if (chunkObj.choices && chunkObj.choices.length > 0) {
const choice = chunkObj.choices[0];
const content = {
role: 'model',
parts: [],
};
if (choice.delta && choice.delta.content) {
content.parts.push({ text: choice.delta.content });
}
if (choice.delta && choice.delta.tool_calls) {
for (const toolCall of choice.delta.tool_calls) {
if (toolCall.function && toolCall.function.name) {
content.parts.push({
functionCall: {
id: toolCall.id,
name: toolCall.function.name,
args: toolCall.function.arguments
? JSON.parse(toolCall.function.arguments)
: {},
},
});
}
}
}
const normalizedStreamParts = this.toolCallProcessor.normalizeTextToolCalls(content.parts);
const targetStreamParts = content.parts;
targetStreamParts.splice(0, targetStreamParts.length, ...normalizedStreamParts);
geminiResponse.candidates.push({
content,
index: choice.index || 0,
finishReason: choice.finish_reason
? this.transformFinishReason(choice.finish_reason)
: undefined,
});
}
return geminiResponse;
}
};
exports.ResponseTransformer = ResponseTransformer;
exports.ResponseTransformer = ResponseTransformer = __decorate([
(0, common_1.Injectable)()
], ResponseTransformer);
//# sourceMappingURL=response.transformer.js.map
;