|
const { promptTokensEstimate } = require('openai-chat-tokens'); |
|
const checkBalance = require('../../../models/checkBalance'); |
|
const { isEnabled } = require('../../../server/utils'); |
|
const { formatFromLangChain } = require('../prompts'); |
|
|
|
const createStartHandler = ({ |
|
context, |
|
conversationId, |
|
tokenBuffer = 0, |
|
initialMessageCount, |
|
manager, |
|
}) => { |
|
return async (_llm, _messages, runId, parentRunId, extraParams) => { |
|
const { invocation_params } = extraParams; |
|
const { model, functions, function_call } = invocation_params; |
|
const messages = _messages[0].map(formatFromLangChain); |
|
|
|
if (manager.debug) { |
|
console.log(`handleChatModelStart: ${context}`); |
|
console.dir({ model, functions, function_call }, { depth: null }); |
|
} |
|
|
|
const payload = { messages }; |
|
let prelimPromptTokens = 1; |
|
|
|
if (functions) { |
|
payload.functions = functions; |
|
prelimPromptTokens += 2; |
|
} |
|
|
|
if (function_call) { |
|
payload.function_call = function_call; |
|
prelimPromptTokens -= 5; |
|
} |
|
|
|
prelimPromptTokens += promptTokensEstimate(payload); |
|
if (manager.debug) { |
|
console.log('Prelim Prompt Tokens & Token Buffer', prelimPromptTokens, tokenBuffer); |
|
} |
|
prelimPromptTokens += tokenBuffer; |
|
|
|
try { |
|
if (isEnabled(process.env.CHECK_BALANCE)) { |
|
const generations = |
|
initialMessageCount && messages.length > initialMessageCount |
|
? messages.slice(initialMessageCount) |
|
: null; |
|
await checkBalance({ |
|
req: manager.req, |
|
res: manager.res, |
|
txData: { |
|
user: manager.user, |
|
tokenType: 'prompt', |
|
amount: prelimPromptTokens, |
|
debug: manager.debug, |
|
generations, |
|
model, |
|
}, |
|
}); |
|
} |
|
} catch (err) { |
|
console.error(`[${context}] checkBalance error`, err); |
|
manager.abortController.abort(); |
|
if (context === 'summary' || context === 'plugins') { |
|
manager.addRun(runId, { conversationId, error: err.message }); |
|
throw new Error(err); |
|
} |
|
return; |
|
} |
|
|
|
manager.addRun(runId, { |
|
model, |
|
messages, |
|
functions, |
|
function_call, |
|
runId, |
|
parentRunId, |
|
conversationId, |
|
prelimPromptTokens, |
|
}); |
|
}; |
|
}; |
|
|
|
module.exports = createStartHandler; |
|
|