fix: address linting and formatting issues for v1 API

This commit is contained in:
Manus
2026-03-18 17:51:10 -04:00
parent 55dda093c8
commit 964f28a86f
2 changed files with 24 additions and 28 deletions

View File

@@ -10,22 +10,20 @@ Endpoints:
GET /api/v1/status — Detailed system and model status
"""
import json
import logging
import os
import uuid
import json
import asyncio
from datetime import datetime, UTC
from datetime import UTC, datetime
from pathlib import Path
from typing import Optional, List
from fastapi import APIRouter, File, HTTPException, Request, UploadFile, Query
from fastapi import APIRouter, File, HTTPException, Query, Request, UploadFile
from fastapi.responses import JSONResponse, StreamingResponse
from config import settings, APP_START_TIME
from dashboard.store import message_log
from timmy.session import chat_with_tools, _get_agent
from config import APP_START_TIME, settings
from dashboard.routes.health import _check_ollama
from dashboard.store import message_log
from timmy.session import _get_agent
logger = logging.getLogger(__name__)
@@ -71,10 +69,10 @@ async def api_v1_chat(request: Request):
f"{datetime.now().strftime('%A, %B %d, %Y at %I:%M %p')}]\n"
f"[System: iPad App client]\n"
)
if attachments:
context_prefix += f"[System: Attachments: {', '.join(attachments)}]\n"
context_prefix += "\n"
full_prompt = context_prefix + message
@@ -87,7 +85,7 @@ async def api_v1_chat(request: Request):
content = chunk.content if hasattr(chunk, "content") else str(chunk)
if content:
yield f"data: {json.dumps({'text': content})}\n\n"
yield "data: [DONE]\n\n"
except Exception as exc:
logger.error("SSE stream error: %s", exc)
@@ -101,14 +99,13 @@ async def api_v1_chat(request: Request):
@router.get("/chat/history")
async def api_v1_chat_history(
session_id: str = Query("ipad-app"),
limit: int = Query(50, ge=1, le=100)
session_id: str = Query("ipad-app"), limit: int = Query(50, ge=1, le=100)
):
"""Return recent chat history for a specific session."""
# Filter and limit the message log
# Note: message_log.all() returns all messages; we filter by source or just return last N
all_msgs = message_log.all()
# In a real implementation, we'd filter by session_id if message_log supported it.
# For now, we return the last 'limit' messages.
history = [
@@ -120,7 +117,7 @@ async def api_v1_chat_history(
}
for msg in all_msgs[-limit:]
]
return {"messages": history}
@@ -155,14 +152,14 @@ async def api_v1_upload(file: UploadFile = File(...)):
contents = await file.read()
if len(contents) > _MAX_UPLOAD_SIZE:
raise HTTPException(status_code=413, detail="File too large (max 50 MB)")
with open(file_path, "wb") as f:
f.write(contents)
# Auto-detect type based on extension/mime
mime_type = file.content_type or "application/octet-stream"
ext = os.path.splitext(safe_name)[1].lower()
media_type = "document"
if mime_type.startswith("image/") or ext in [".jpg", ".jpeg", ".png", ".heic"]:
media_type = "image"
@@ -179,11 +176,7 @@ async def api_v1_upload(file: UploadFile = File(...)):
"type": media_type,
"summary": summary,
"url": f"/uploads/{stored_name}",
"metadata": {
"fileName": safe_name,
"mimeType": mime_type,
"size": len(contents)
}
"metadata": {"fileName": safe_name, "mimeType": mime_type, "size": len(contents)},
}
@@ -195,11 +188,11 @@ async def api_v1_status():
"""Detailed system and model status."""
ollama_status = await _check_ollama()
uptime = (datetime.now(UTC) - APP_START_TIME).total_seconds()
return {
"timmy": "online" if ollama_status.status == "healthy" else "offline",
"model": settings.ollama_model,
"ollama": "running" if ollama_status.status == "healthy" else "stopped",
"uptime": f"{int(uptime // 3600)}h {int((uptime % 3600) // 60)}m",
"version": "2.0.0-v1-api"
"version": "2.0.0-v1-api",
}