Files
vibe-coding-cn/libs/external/chat-vault/src/parsers/gemini.py
T

41 lines
1.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import glob
import json
from .base import BaseParser, SessionData
class GeminiParser(BaseParser):
def find_files(self, paths: list) -> list:
files = []
for base in paths:
if os.path.exists(base):
files.extend(glob.glob(os.path.join(base, "*", "chats", "*.json")))
return files
def parse_file(self, filepath: str) -> SessionData:
s = SessionData(
session_id=os.path.basename(filepath).replace('.json', ''),
source='gemini',
file_path=filepath,
file_mtime=os.path.getmtime(filepath)
)
with open(filepath, 'r', encoding='utf-8') as f:
data = json.load(f)
s.session_id = data.get('sessionId', s.session_id)
for msg in data.get('messages', []):
if msg.get('type') not in ('user', 'gemini'):
continue
content = msg.get('content', '')
if content:
s.messages.append({
'time': msg.get('timestamp', ''),
'role': 'user' if msg.get('type') == 'user' else 'ai',
'content': content
})
return s