v2.2.0 (#395)
Co-authored-by: Quentin Torroba <quentin.torroba@mistral.ai> Co-authored-by: Clément Siriex <clement.sirieix@mistral.ai> Co-authored-by: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai> Co-authored-by: Michel Thomazo <michel.thomazo@mistral.ai> Co-authored-by: Clément Drouin <clement.drouin@mistral.ai>
This commit is contained in:
parent
51fecc67d9
commit
ec7f3b25ea
107 changed files with 8002 additions and 535 deletions
|
|
@ -1,8 +1,9 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from datetime import UTC, datetime
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING, Any, TypedDict
|
||||
|
||||
from vibe.core.session.session_logger import MESSAGES_FILENAME, METADATA_FILENAME
|
||||
from vibe.core.types import LLMMessage
|
||||
|
|
@ -11,6 +12,13 @@ if TYPE_CHECKING:
|
|||
from vibe.core.config import SessionLoggingConfig
|
||||
|
||||
|
||||
class SessionInfo(TypedDict):
|
||||
session_id: str
|
||||
cwd: str
|
||||
title: str | None
|
||||
end_time: str | None
|
||||
|
||||
|
||||
class SessionLoader:
|
||||
@staticmethod
|
||||
def _is_valid_session(session_dir: Path) -> bool:
|
||||
|
|
@ -106,6 +114,63 @@ class SessionLoader:
|
|||
short_id = session_id[:8]
|
||||
return list(save_dir.glob(f"{config.session_prefix}_*_{short_id}"))
|
||||
|
||||
@staticmethod
|
||||
def _convert_to_utc_iso(date_str: str) -> str:
|
||||
dt = datetime.fromisoformat(date_str)
|
||||
if dt.tzinfo is None:
|
||||
dt = dt.astimezone()
|
||||
utc_dt = dt.astimezone(UTC)
|
||||
return utc_dt.isoformat()
|
||||
|
||||
@staticmethod
|
||||
def list_sessions(
|
||||
config: SessionLoggingConfig, cwd: str | None = None
|
||||
) -> list[SessionInfo]:
|
||||
save_dir = Path(config.save_dir)
|
||||
if not save_dir.exists():
|
||||
return []
|
||||
|
||||
pattern = f"{config.session_prefix}_*"
|
||||
session_dirs = list(save_dir.glob(pattern))
|
||||
|
||||
sessions: list[SessionInfo] = []
|
||||
for session_dir in session_dirs:
|
||||
if not SessionLoader._is_valid_session(session_dir):
|
||||
continue
|
||||
|
||||
metadata_path = session_dir / METADATA_FILENAME
|
||||
try:
|
||||
with metadata_path.open("r", encoding="utf-8") as f:
|
||||
metadata = json.load(f)
|
||||
except (OSError, json.JSONDecodeError):
|
||||
continue
|
||||
|
||||
session_id = metadata.get("session_id")
|
||||
if not session_id:
|
||||
continue
|
||||
|
||||
environment = metadata.get("environment", {})
|
||||
session_cwd = environment.get("working_directory", "")
|
||||
|
||||
if cwd is not None and session_cwd != cwd:
|
||||
continue
|
||||
|
||||
end_time = metadata.get("end_time")
|
||||
if end_time:
|
||||
try:
|
||||
end_time = SessionLoader._convert_to_utc_iso(end_time)
|
||||
except (ValueError, OSError):
|
||||
end_time = None
|
||||
|
||||
sessions.append({
|
||||
"session_id": session_id,
|
||||
"cwd": session_cwd,
|
||||
"title": metadata.get("title"),
|
||||
"end_time": end_time,
|
||||
})
|
||||
|
||||
return sessions
|
||||
|
||||
@staticmethod
|
||||
def load_session(filepath: Path) -> tuple[list[LLMMessage], dict[str, Any]]:
|
||||
# Load session messages from MESSAGES_FILENAME
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue