Multi_LLM_Image_Captioning / caption_history.py
HarshitX's picture
Upload 9 files
8a8f3ed verified
import datetime
import json
import os
from typing import Dict, List, Optional
from langchain.schema import HumanMessage, AIMessage
from langchain.memory import ConversationBufferMemory
class CaptionHistory:
"""
Manages caption generation history using Langchain
"""
def __init__(self):
self.memory = ConversationBufferMemory(
return_messages=True,
memory_key="chat_history"
)
self.history_file = "caption_history.json"
self.load_history() # Load existing history on initialization
def add_interaction(self, image_name: str, model: str,
caption: str, timestamp: str|None = None):
if not timestamp:
timestamp = datetime.datetime.now().isoformat()
interaction = {
"timestamp": timestamp,
"image_name": image_name,
"model": model,
"caption": caption
}
# Add to langchain memory
human_msg = HumanMessage(
content=f"Generate caption for {image_name} using {model}"
)
ai_msg = AIMessage(content=caption)
self.memory.chat_memory.add_user_message(human_msg.content)
self.memory.chat_memory.add_ai_message(ai_msg.content)
# Save the file
self.save_interaction(interaction)
def get_history(self) -> List[Optional[Dict[str, str]]]:
try:
with open(self.history_file, mode="r") as f:
return json.load(f)
except FileNotFoundError:
return []
def save_interaction(self, interaction: Dict[str, str]) -> None:
history = self.get_history()
history.append(interaction)
with open(self.history_file, mode="w") as f:
json.dump(history, f, indent=2)
def load_history(self):
"""Fixed: Proper string formatting in f-strings"""
history = self.get_history()
for item in history:
human_msg = HumanMessage(
content=f"Generate caption for {item['image_name']} using {item['model']}" # Fixed: proper quotes
)
ai_msg = AIMessage(content=item["caption"])
self.memory.chat_memory.add_user_message(human_msg.content)
self.memory.chat_memory.add_ai_message(ai_msg.content)
def clear_history(self):
self.memory.clear()
if os.path.exists(self.history_file):
os.remove(self.history_file)