Compare commits

...

2 Commits

Author SHA1 Message Date
Alexander Whitestone
393cf3a2e1 fix: #936 Extract hardcoded PRAGMA busy_timeout=5000 2026-03-23 15:30:24 -04:00
Alexander Whitestone
0331e0e5bb WIP: Gemini Code progress on #936
Automated salvage commit — agent session ended (exit 124).
Work in progress, may need continuation.
2026-03-23 14:31:24 -04:00
9 changed files with 22 additions and 19 deletions

View File

@@ -16,6 +16,8 @@ from datetime import UTC, datetime
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
from src.config import settings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -102,7 +104,7 @@ class EventBus:
self._persistence_db_path.parent.mkdir(parents=True, exist_ok=True) self._persistence_db_path.parent.mkdir(parents=True, exist_ok=True)
with closing(sqlite3.connect(str(self._persistence_db_path))) as conn: with closing(sqlite3.connect(str(self._persistence_db_path))) as conn:
conn.execute("PRAGMA journal_mode=WAL") conn.execute("PRAGMA journal_mode=WAL")
conn.execute("PRAGMA busy_timeout=5000") conn.execute(f"PRAGMA busy_timeout={settings.db_busy_timeout_ms}")
conn.executescript(_EVENTS_SCHEMA) conn.executescript(_EVENTS_SCHEMA)
conn.commit() conn.commit()
@@ -114,7 +116,7 @@ class EventBus:
return return
with closing(sqlite3.connect(str(self._persistence_db_path))) as conn: with closing(sqlite3.connect(str(self._persistence_db_path))) as conn:
conn.row_factory = sqlite3.Row conn.row_factory = sqlite3.Row
conn.execute("PRAGMA busy_timeout=5000") conn.execute(f"PRAGMA busy_timeout={settings.db_busy_timeout_ms}")
yield conn yield conn
def _persist_event(self, event: Event) -> None: def _persist_event(self, event: Event) -> None:

View File

@@ -18,6 +18,8 @@ from datetime import UTC, datetime
from enum import StrEnum from enum import StrEnum
from pathlib import Path from pathlib import Path
from src.config import settings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
DB_PATH = Path("data/swarm.db") DB_PATH = Path("data/swarm.db")
@@ -68,7 +70,7 @@ def _get_conn() -> Generator[sqlite3.Connection, None, None]:
with closing(sqlite3.connect(str(DB_PATH))) as conn: with closing(sqlite3.connect(str(DB_PATH))) as conn:
conn.row_factory = sqlite3.Row conn.row_factory = sqlite3.Row
conn.execute("PRAGMA journal_mode=WAL") conn.execute("PRAGMA journal_mode=WAL")
conn.execute("PRAGMA busy_timeout=5000") conn.execute(f"PRAGMA busy_timeout={settings.db_busy_timeout_ms}")
conn.execute(""" conn.execute("""
CREATE TABLE IF NOT EXISTS custom_models ( CREATE TABLE IF NOT EXISTS custom_models (
name TEXT PRIMARY KEY, name TEXT PRIMARY KEY,

View File

@@ -22,6 +22,8 @@ from dataclasses import dataclass
from datetime import UTC, datetime from datetime import UTC, datetime
from pathlib import Path from pathlib import Path
from src.config import settings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
DB_PATH = Path("data/spark.db") DB_PATH = Path("data/spark.db")
@@ -47,7 +49,7 @@ def _get_conn() -> Generator[sqlite3.Connection, None, None]:
with closing(sqlite3.connect(str(DB_PATH))) as conn: with closing(sqlite3.connect(str(DB_PATH))) as conn:
conn.row_factory = sqlite3.Row conn.row_factory = sqlite3.Row
conn.execute("PRAGMA journal_mode=WAL") conn.execute("PRAGMA journal_mode=WAL")
conn.execute("PRAGMA busy_timeout=5000") conn.execute(f"PRAGMA busy_timeout={settings.db_busy_timeout_ms}")
conn.execute(""" conn.execute("""
CREATE TABLE IF NOT EXISTS spark_predictions ( CREATE TABLE IF NOT EXISTS spark_predictions (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,

View File

@@ -19,6 +19,8 @@ from dataclasses import dataclass
from datetime import UTC, datetime from datetime import UTC, datetime
from pathlib import Path from pathlib import Path
from src.config import settings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
DB_PATH = Path("data/spark.db") DB_PATH = Path("data/spark.db")
@@ -63,7 +65,7 @@ def _get_conn() -> Generator[sqlite3.Connection, None, None]:
with closing(sqlite3.connect(str(DB_PATH))) as conn: with closing(sqlite3.connect(str(DB_PATH))) as conn:
conn.row_factory = sqlite3.Row conn.row_factory = sqlite3.Row
conn.execute("PRAGMA journal_mode=WAL") conn.execute("PRAGMA journal_mode=WAL")
conn.execute("PRAGMA busy_timeout=5000") conn.execute(f"PRAGMA busy_timeout={settings.db_busy_timeout_ms}")
conn.execute(""" conn.execute("""
CREATE TABLE IF NOT EXISTS spark_events ( CREATE TABLE IF NOT EXISTS spark_events (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,

View File

@@ -13,8 +13,8 @@ from dataclasses import dataclass
import httpx import httpx
from config import settings from config import settings
from timmy.research_tools import get_llm_client, google_web_search
from timmy.research_triage import triage_research_report from timmy.research_triage import triage_research_report
from timmy.research_tools import google_web_search, get_llm_client
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -6,7 +6,6 @@ import logging
import os import os
from typing import Any from typing import Any
from config import settings
from serpapi import GoogleSearch from serpapi import GoogleSearch
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -6,8 +6,8 @@ import time
from pathlib import Path from pathlib import Path
import pytest import pytest
from src.config import settings
from infrastructure.db_pool import ConnectionPool from src.infrastructure.db_pool import ConnectionPool
class TestConnectionPoolInit: class TestConnectionPoolInit:
@@ -330,9 +330,9 @@ class TestPragmaApplication:
"""busy_timeout pragma set on a pooled connection persists.""" """busy_timeout pragma set on a pooled connection persists."""
pool = ConnectionPool(tmp_path / "test.db") pool = ConnectionPool(tmp_path / "test.db")
conn = pool.get_connection() conn = pool.get_connection()
conn.execute("PRAGMA busy_timeout=5000") conn.execute(f"PRAGMA busy_timeout={settings.db_busy_timeout_ms}")
timeout = conn.execute("PRAGMA busy_timeout").fetchone()[0] timeout = conn.execute("PRAGMA busy_timeout").fetchone()[0]
assert timeout == 5000 assert timeout == settings.db_busy_timeout_ms
pool.close_connection() pool.close_connection()
def test_pragmas_apply_per_connection(self, tmp_path): def test_pragmas_apply_per_connection(self, tmp_path):

View File

@@ -9,10 +9,8 @@ import json
from pathlib import Path from pathlib import Path
import pytest import pytest
import scripts.export_trajectories as et import scripts.export_trajectories as et
# ── Fixtures ────────────────────────────────────────────────────────────────── # ── Fixtures ──────────────────────────────────────────────────────────────────
@@ -236,7 +234,9 @@ def test_export_training_data_writes_jsonl(simple_session: Path, tmp_path: Path)
count = et.export_training_data(logs_dir=simple_session, output_path=output) count = et.export_training_data(logs_dir=simple_session, output_path=output)
assert count == 2 assert count == 2
assert output.exists() assert output.exists()
lines = [json.loads(l) for l in output.read_text().splitlines() if l.strip()] lines = [
json.loads(line) for line in output.read_text().splitlines() if line.strip()
]
assert len(lines) == 2 assert len(lines) == 2
for line in lines: for line in lines:
assert "messages" in line assert "messages" in line

View File

@@ -9,19 +9,15 @@ Refs: #1105
from __future__ import annotations from __future__ import annotations
import json import json
import tempfile
from datetime import UTC, datetime, timedelta from datetime import UTC, datetime, timedelta
from pathlib import Path from pathlib import Path
import pytest
from timmy_automations.retrain.quality_filter import QualityFilter, TrajectoryQuality from timmy_automations.retrain.quality_filter import QualityFilter, TrajectoryQuality
from timmy_automations.retrain.retrain import RetrainOrchestrator from timmy_automations.retrain.retrain import RetrainOrchestrator
from timmy_automations.retrain.training_dataset import TrainingDataset from timmy_automations.retrain.training_dataset import TrainingDataset
from timmy_automations.retrain.training_log import CycleMetrics, TrainingLog from timmy_automations.retrain.training_log import CycleMetrics, TrainingLog
from timmy_automations.retrain.trajectory_exporter import Trajectory, TrajectoryExporter from timmy_automations.retrain.trajectory_exporter import Trajectory, TrajectoryExporter
# ── Fixtures ───────────────────────────────────────────────────────────────── # ── Fixtures ─────────────────────────────────────────────────────────────────
@@ -382,7 +378,7 @@ class TestTrainingDataset:
ds = TrainingDataset(repo_root=tmp_path) ds = TrainingDataset(repo_root=tmp_path)
ds.append([self._make_result()], "2026-W12") ds.append([self._make_result()], "2026-W12")
with open(ds.dataset_path) as f: with open(ds.dataset_path) as f:
lines = [l.strip() for l in f if l.strip()] lines = [line.strip() for line in f if line.strip()]
assert len(lines) == 1 assert len(lines) == 1
record = json.loads(lines[0]) record = json.loads(lines[0])
assert "messages" in record assert "messages" in record