@openai/agents-core
Version:
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.
95 lines • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLastTextFromOutputMessage = getLastTextFromOutputMessage;
exports.getTextFromOutputMessage = getTextFromOutputMessage;
exports.getRefusalFromOutputMessage = getRefusalFromOutputMessage;
exports.getOutputText = getOutputText;
function getAssistantMessage(outputMessage) {
if (outputMessage.type !== 'message') {
return null;
}
if (!('role' in outputMessage) || outputMessage.role !== 'assistant') {
return null;
}
return outputMessage;
}
/**
* Get the last text from the output message.
* @param outputMessage
* @returns
*/
function getLastTextFromOutputMessage(outputMessage) {
const assistantMessage = getAssistantMessage(outputMessage);
if (!assistantMessage) {
return undefined;
}
const lastItem = assistantMessage.content[assistantMessage.content.length - 1];
if (lastItem.type !== 'output_text') {
return undefined;
}
return lastItem.text;
}
/**
* Get all text from the output message.
* @param outputMessage
* @returns
*/
function getTextFromOutputMessage(outputMessage) {
const assistantMessage = getAssistantMessage(outputMessage);
if (!assistantMessage) {
return undefined;
}
let sawText = false;
const text = assistantMessage.content.reduce((acc, item) => {
if (item.type !== 'output_text') {
return acc;
}
sawText = true;
return acc + item.text;
}, '');
return sawText ? text : undefined;
}
/**
* Get all refusal text from the output message.
* @param outputMessage
* @returns
*/
function getRefusalFromOutputMessage(outputMessage) {
const assistantMessage = getAssistantMessage(outputMessage);
if (!assistantMessage) {
return undefined;
}
let sawRefusal = false;
const refusal = assistantMessage.content.reduce((acc, item) => {
if (item.type !== 'refusal') {
return acc;
}
sawRefusal = true;
return acc + item.refusal;
}, '');
return sawRefusal ? refusal : undefined;
}
/**
* Get the final text from the model response.
* @param output
* @returns
*/
function getOutputText(output) {
if (output.output.length === 0) {
return '';
}
const isSegmentedAssistantResponse = output.output.some((item) => item.type === 'reasoning' ||
item.type === 'tool_search_call' ||
item.type === 'tool_search_output') &&
output.output.every((item) => item.type === 'message' ||
item.type === 'reasoning' ||
item.type === 'tool_search_call' ||
item.type === 'tool_search_output');
if (!isSegmentedAssistantResponse) {
return (getTextFromOutputMessage(output.output[output.output.length - 1]) ?? '');
}
return output.output
.map((item) => getTextFromOutputMessage(item) ?? '')
.join('');
}
//# sourceMappingURL=messages.js.map