feat(hermes): generate contextual intro message using LLM

- Use Hermes AI to generate page-specific welcome message
- Extract current page content and title for context
- Create 3-paragraph intro that acknowledges specific page content
- Show loading message while generating contextual intro
- Fallback to basic intro if generation fails
- Make intro relevant to what user is actually viewing
This commit is contained in:
Russell Ballestrini 2025-07-02 08:08:46 -04:00
parent 051f589c4e
commit e8bef319da

View file

@ -805,7 +805,7 @@ async function openHermesModalNew() {
const actions = [
{ text: "📁 Upload File", action: () => document.querySelector('[data-uncloseai-file-input]')?.click() },
{ text: "🔄 Refresh Models", action: loadModels },
{ text: "🗑️ Clear Chat", action: () => {
{ text: "🗑️ Clear Chat", action: async () => {
if (confirm("Clear all conversation history?")) {
chatBox.innerHTML = '';
clearConversationHistory();
@ -817,7 +817,7 @@ async function openHermesModalNew() {
console.log("Chat history cleared, reset to system message only");
// Re-add intro message
addIntroMessage();
await addIntroMessage();
}
}}
];
@ -1332,15 +1332,15 @@ async function openHermesModalNew() {
chatArea.scrollTop = chatArea.scrollHeight;
} else {
// Add intro message if no history
addIntroMessage();
await addIntroMessage();
}
} catch (error) {
console.error("Failed to load conversation history:", error);
addIntroMessage();
await addIntroMessage();
}
};
const addIntroMessage = () => {
const addIntroMessage = async () => {
const introMsg = document.createElement("div");
introMsg.style.cssText = `
align-self: flex-start;
@ -1351,8 +1351,42 @@ async function openHermesModalNew() {
box-shadow: 0 1px 2px rgba(0,0,0,0.1);
color: #495057;
`;
introMsg.innerHTML = `👋 Hi! I'm Hermes AI. I can help you understand this page, answer questions, or assist with various tasks. How can I help you today?`;
// Show loading message first
introMsg.innerHTML = '<em style="color: #6c757d;">Analyzing page and generating welcome message...</em>';
chatBox.appendChild(introMsg);
try {
// Get page content for context
const pageContent = extractWebpageContent();
const pageTitle = document.title || window.location.hostname;
// Generate contextual intro message using Hermes
const contextPrompt = `You are Hermes AI, embedded on a webpage. Generate a warm, welcoming 3-paragraph introduction message that:
1. First paragraph: Introduce yourself as Hermes AI (powered by Nous Research) and acknowledge the specific page/content the user is viewing
2. Second paragraph: Explain how you can help with this specific page content and related topics
3. Third paragraph: Invite questions and explain your capabilities
Page title: "${pageTitle}"
Page content preview: "${pageContent.substring(0, 1000)}..."
Keep it conversational, helpful, and specific to this page context. Use a friendly tone and make it clear you understand what page they're on.`;
let response = '';
for await (const chunk of sendMessage(contextPrompt)) {
response += chunk;
introMsg.innerHTML = marked.parse(response);
}
// Save this intro as part of the conversation
saveConversationHistory(chatHistory);
} catch (error) {
console.error("Failed to generate contextual intro:", error);
// Fallback to basic intro
introMsg.innerHTML = `👋 Hi! I'm Hermes AI. I can help you understand this page, answer questions, or assist with various tasks. How can I help you today?`;
}
};
await loadHistory();