fix: resolve lint errors — import ordering, line length
All checks were successful
ci/woodpecker/push/build Pipeline was successful

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-02 18:30:12 -06:00
parent 3c168e849a
commit f33d4a57a3
5 changed files with 31 additions and 10 deletions

View File

@@ -1,7 +1,13 @@
"""Core brain operations — capture, search, recent, stats.""" """Core brain operations — capture, search, recent, stats."""
import json import json
from src import db, embeddings from src import db, embeddings
from src.models import CaptureRequest, Thought, SearchRequest, SearchResult, Stats from src.models import CaptureRequest, SearchRequest, SearchResult, Stats, Thought
def _meta(raw) -> dict:
return json.loads(raw) if isinstance(raw, str) else dict(raw)
async def capture(req: CaptureRequest) -> Thought: async def capture(req: CaptureRequest) -> Thought:
@@ -15,25 +21,32 @@ async def capture(req: CaptureRequest) -> Thought:
""" """
INSERT INTO thoughts (content, embedding, source, metadata) INSERT INTO thoughts (content, embedding, source, metadata)
VALUES ($1, $2::vector, $3, $4::jsonb) VALUES ($1, $2::vector, $3, $4::jsonb)
RETURNING id::text, content, source, metadata, created_at, embedding IS NOT NULL AS embedded RETURNING id::text, content, source, metadata, created_at,
embedding IS NOT NULL AS embedded
""", """,
req.content, vec, req.source, json.dumps(req.metadata), req.content,
vec,
req.source,
json.dumps(req.metadata),
) )
else: else:
row = await conn.fetchrow( row = await conn.fetchrow(
""" """
INSERT INTO thoughts (content, source, metadata) INSERT INTO thoughts (content, source, metadata)
VALUES ($1, $2, $3::jsonb) VALUES ($1, $2, $3::jsonb)
RETURNING id::text, content, source, metadata, created_at, embedding IS NOT NULL AS embedded RETURNING id::text, content, source, metadata, created_at,
embedding IS NOT NULL AS embedded
""", """,
req.content, req.source, json.dumps(req.metadata), req.content,
req.source,
json.dumps(req.metadata),
) )
return Thought( return Thought(
id=row["id"], id=row["id"],
content=row["content"], content=row["content"],
source=row["source"], source=row["source"],
metadata=json.loads(row["metadata"]) if isinstance(row["metadata"], str) else row["metadata"], metadata=_meta(row["metadata"]),
created_at=row["created_at"], created_at=row["created_at"],
embedded=row["embedded"], embedded=row["embedded"],
) )
@@ -58,7 +71,9 @@ async def search(req: SearchRequest) -> list[SearchResult]:
ORDER BY embedding <=> $1::vector ORDER BY embedding <=> $1::vector
LIMIT $3 LIMIT $3
""", """,
vec, req.source, req.limit, vec,
req.source,
req.limit,
) )
else: else:
rows = await conn.fetch( rows = await conn.fetch(
@@ -70,7 +85,8 @@ async def search(req: SearchRequest) -> list[SearchResult]:
ORDER BY embedding <=> $1::vector ORDER BY embedding <=> $1::vector
LIMIT $2 LIMIT $2
""", """,
vec, req.limit, vec,
req.limit,
) )
return [ return [
@@ -80,7 +96,7 @@ async def search(req: SearchRequest) -> list[SearchResult]:
source=r["source"], source=r["source"],
similarity=float(r["similarity"]), similarity=float(r["similarity"]),
created_at=r["created_at"], created_at=r["created_at"],
metadata=json.loads(r["metadata"]) if isinstance(r["metadata"], str) else r["metadata"], metadata=_meta(r["metadata"]),
) )
for r in rows for r in rows
] ]

View File

@@ -1,4 +1,5 @@
import asyncpg import asyncpg
from src.config import settings from src.config import settings
_pool: asyncpg.Pool | None = None _pool: asyncpg.Pool | None = None

View File

@@ -1,4 +1,5 @@
import httpx import httpx
from src.config import settings from src.config import settings

View File

@@ -1,4 +1,5 @@
"""OpenBrain — FastAPI REST + MCP server (single process).""" """OpenBrain — FastAPI REST + MCP server (single process)."""
import contextlib import contextlib
import logging import logging
@@ -40,7 +41,8 @@ async def capture(content: str, source: str = "unknown", metadata: dict | None =
source: Which agent or tool is capturing this (e.g. 'claude-code', 'codex') source: Which agent or tool is capturing this (e.g. 'claude-code', 'codex')
metadata: Optional key/value pairs (tags, project, etc.) metadata: Optional key/value pairs (tags, project, etc.)
""" """
thought = await brain.capture(CaptureRequest(content=content, source=source, metadata=metadata or {})) req = CaptureRequest(content=content, source=source, metadata=metadata or {})
thought = await brain.capture(req)
return thought.model_dump(mode="json") return thought.model_dump(mode="json")

View File

@@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
from typing import Any from typing import Any
from pydantic import BaseModel from pydantic import BaseModel