forked from Shinonome/dots-hyprland
ai: save last chat, make sure model's messages are saved properly
This commit is contained in:
@@ -461,6 +461,7 @@ Singleton {
|
|||||||
root.postResponseHook();
|
root.postResponseHook();
|
||||||
root.postResponseHook = null; // Reset hook after use
|
root.postResponseHook = null; // Reset hook after use
|
||||||
}
|
}
|
||||||
|
root.saveChat("lastSession")
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildGeminiRequestData(model, messages) {
|
function buildGeminiRequestData(model, messages) {
|
||||||
@@ -492,7 +493,7 @@ Singleton {
|
|||||||
return {
|
return {
|
||||||
"role": geminiApiRoleName,
|
"role": geminiApiRoleName,
|
||||||
"parts": [{
|
"parts": [{
|
||||||
text: message.content,
|
text: message.rawContent,
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
@@ -517,7 +518,7 @@ Singleton {
|
|||||||
...messages.filter(message => (message.role != Ai.interfaceRole)).map(message => {
|
...messages.filter(message => (message.role != Ai.interfaceRole)).map(message => {
|
||||||
return {
|
return {
|
||||||
"role": message.role,
|
"role": message.role,
|
||||||
"content": message.content,
|
"content": message.rawContent,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
@@ -594,12 +595,15 @@ Singleton {
|
|||||||
const functionCall = dataJson.candidates[0]?.content?.parts[0]?.functionCall;
|
const functionCall = dataJson.candidates[0]?.content?.parts[0]?.functionCall;
|
||||||
requester.message.functionName = functionCall.name;
|
requester.message.functionName = functionCall.name;
|
||||||
requester.message.functionCall = functionCall.name;
|
requester.message.functionCall = functionCall.name;
|
||||||
requester.message.content += `\n\n[[ Function: ${functionCall.name}(${JSON.stringify(functionCall.args, null, 2)}) ]]\n`;
|
const newContent = `\n\n[[ Function: ${functionCall.name}(${JSON.stringify(functionCall.args, null, 2)}) ]]\n`
|
||||||
|
requester.message.rawContent += newContent;
|
||||||
|
requester.message.content += newContent;
|
||||||
root.handleGeminiFunctionCall(functionCall.name, functionCall.args);
|
root.handleGeminiFunctionCall(functionCall.name, functionCall.args);
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Normal text response
|
// Normal text response
|
||||||
const responseContent = dataJson.candidates[0]?.content?.parts[0]?.text
|
const responseContent = dataJson.candidates[0]?.content?.parts[0]?.text
|
||||||
|
requester.message.rawContent += responseContent;
|
||||||
requester.message.content += responseContent;
|
requester.message.content += responseContent;
|
||||||
const annotationSources = dataJson.candidates[0]?.groundingMetadata?.groundingChunks?.map(chunk => {
|
const annotationSources = dataJson.candidates[0]?.groundingMetadata?.groundingChunks?.map(chunk => {
|
||||||
return {
|
return {
|
||||||
@@ -623,6 +627,7 @@ Singleton {
|
|||||||
// console.log(JSON.stringify(requester.message, null, 2));
|
// console.log(JSON.stringify(requester.message, null, 2));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("[AI] Could not parse response from stream: ", e);
|
console.log("[AI] Could not parse response from stream: ", e);
|
||||||
|
requester.message.rawContent += requester.geminiBuffer;
|
||||||
requester.message.content += requester.geminiBuffer
|
requester.message.content += requester.geminiBuffer
|
||||||
} finally {
|
} finally {
|
||||||
requester.geminiBuffer = "";
|
requester.geminiBuffer = "";
|
||||||
@@ -664,14 +669,18 @@ Singleton {
|
|||||||
if (responseContent && responseContent.length > 0) {
|
if (responseContent && responseContent.length > 0) {
|
||||||
if (requester.isReasoning) {
|
if (requester.isReasoning) {
|
||||||
requester.isReasoning = false;
|
requester.isReasoning = false;
|
||||||
requester.message.content += "\n\n</think>\n\n";
|
const endBlock = "\n\n</think>\n\n";
|
||||||
|
requester.message.content += endBlock;
|
||||||
|
requester.message.rawContent += endBlock;
|
||||||
}
|
}
|
||||||
newContent = dataJson.choices[0]?.delta?.content || dataJson.message.content;
|
newContent = dataJson.choices[0]?.delta?.content || dataJson.message.content;
|
||||||
} else if (responseReasoning && responseReasoning.length > 0) {
|
} else if (responseReasoning && responseReasoning.length > 0) {
|
||||||
// console.log("Reasoning content: ", dataJson.choices[0].delta.reasoning);
|
// console.log("Reasoning content: ", dataJson.choices[0].delta.reasoning);
|
||||||
if (!requester.isReasoning) {
|
if (!requester.isReasoning) {
|
||||||
requester.isReasoning = true;
|
requester.isReasoning = true;
|
||||||
requester.message.content += "\n\n<think>\n\n";
|
const startBlock = "\n\n<think>\n\n";
|
||||||
|
requester.message.rawContent += startBlock;
|
||||||
|
requester.message.content += startBlock;
|
||||||
}
|
}
|
||||||
newContent = dataJson.choices[0].delta.reasoning || dataJson.choices[0].delta.reasoning_content;
|
newContent = dataJson.choices[0].delta.reasoning || dataJson.choices[0].delta.reasoning_content;
|
||||||
}
|
}
|
||||||
@@ -699,10 +708,12 @@ Singleton {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log("Unknown API format: ", requester.apiFormat);
|
console.log("Unknown API format: ", requester.apiFormat);
|
||||||
|
requester.message.rawContent += data;
|
||||||
requester.message.content += data;
|
requester.message.content += data;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("[AI] Could not parse response from stream: ", e);
|
console.log("[AI] Could not parse response from stream: ", e);
|
||||||
|
requester.message.rawContent += data;
|
||||||
requester.message.content += data;
|
requester.message.content += data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -714,8 +725,9 @@ Singleton {
|
|||||||
|
|
||||||
try { // to parse full response into json for error handling
|
try { // to parse full response into json for error handling
|
||||||
// console.log("Full response: ", requester.message.content + "]");
|
// console.log("Full response: ", requester.message.content + "]");
|
||||||
const parsedResponse = JSON.parse(requester.message.content + "]");
|
const parsedResponse = JSON.parse(requester.message.rawContent + "]");
|
||||||
requester.message.content = `\`\`\`json\n${JSON.stringify(parsedResponse, null, 2)}\n\`\`\``;
|
requester.message.rawContent = `\`\`\`json\n${JSON.stringify(parsedResponse, null, 2)}\n\`\`\``;
|
||||||
|
requester.message.content = requester.message.rawContent;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// console.log("[AI] Could not parse response on exit: ", e);
|
// console.log("[AI] Could not parse response on exit: ", e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user