Multi_LLM_Image_Captioning / caption_history.py
HarshitX's picture
Upload 9 files
8a8f3ed verified
raw
history blame
2.51 kB
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)