Convert all Chinese comments, docstrings, logger/print output, HTTPException detail messages, and API response messages to English across the entire codebase. Functional zh/ja localized strings (e.g. prompt templates, timezone display names, date formats) are preserved as-is. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
156 lines
4.3 KiB
Python
156 lines
4.3 KiB
Python
import os
|
|
import time
|
|
import multiprocessing
|
|
from typing import Optional
|
|
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
from utils import (
|
|
setup_system_optimizations
|
|
)
|
|
|
|
from embedding import get_model_manager
|
|
from pydantic import BaseModel
|
|
import logging
|
|
|
|
logger = logging.getLogger('app')
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class EncodeRequest(BaseModel):
|
|
texts: list[str]
|
|
batch_size: int = 32
|
|
|
|
|
|
class EncodeResponse(BaseModel):
|
|
success: bool
|
|
embeddings: list[list[float]]
|
|
shape: list[int]
|
|
processing_time: float
|
|
total_texts: int
|
|
error: Optional[str] = None
|
|
|
|
|
|
# Initialize system optimization settings
|
|
logger.info("Initializing system optimizations...")
|
|
system_optimizer = setup_system_optimizations()
|
|
|
|
|
|
logger.info("System optimization initialization completed")
|
|
|
|
|
|
@router.get("/api/health")
|
|
async def health_check():
|
|
"""Health check endpoint"""
|
|
return {"message": "Database Assistant API is running"}
|
|
|
|
|
|
@router.get("/api/v1/system/performance")
|
|
async def get_performance_stats():
|
|
"""Get system performance statistics."""
|
|
try:
|
|
# Get connection pool statistics (simplified)
|
|
pool_stats = {
|
|
"connection_pool": "active",
|
|
"max_connections_per_host": 100,
|
|
"max_connections_total": 500,
|
|
"keepalive_timeout": 30
|
|
}
|
|
|
|
# Get file cache statistics
|
|
file_cache_stats = {
|
|
"cache_size": len(file_cache._cache) if hasattr(file_cache, '_cache') else 0,
|
|
"max_cache_size": file_cache.cache_size if hasattr(file_cache, 'cache_size') else 1000,
|
|
"ttl": file_cache.ttl if hasattr(file_cache, 'ttl') else 300
|
|
}
|
|
|
|
# System resource information
|
|
try:
|
|
import psutil
|
|
system_stats = {
|
|
"cpu_count": multiprocessing.cpu_count(),
|
|
"memory_total_gb": round(psutil.virtual_memory().total / (1024**3), 2),
|
|
"memory_available_gb": round(psutil.virtual_memory().available / (1024**3), 2),
|
|
"memory_percent": psutil.virtual_memory().percent,
|
|
"disk_usage_percent": psutil.disk_usage('/').percent
|
|
}
|
|
except ImportError:
|
|
system_stats = {
|
|
"cpu_count": multiprocessing.cpu_count(),
|
|
"memory_info": "psutil not available"
|
|
}
|
|
|
|
return {
|
|
"success": True,
|
|
"timestamp": int(time.time()),
|
|
"performance": {
|
|
"connection_pool": pool_stats,
|
|
"file_cache": file_cache_stats,
|
|
"system": system_stats
|
|
}
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error getting performance stats: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Failed to get performance statistics: {str(e)}")
|
|
|
|
|
|
|
|
@router.post("/api/v1/embedding/encode", response_model=EncodeResponse)
|
|
async def encode_texts(request: EncodeRequest):
|
|
"""
|
|
Text encoding API.
|
|
|
|
Args:
|
|
request: Encoding request containing texts and batch_size
|
|
|
|
Returns:
|
|
Encoding result
|
|
"""
|
|
try:
|
|
model_manager = get_model_manager()
|
|
|
|
if not request.texts:
|
|
return EncodeResponse(
|
|
success=False,
|
|
embeddings=[],
|
|
shape=[0, 0],
|
|
processing_time=0.0,
|
|
total_texts=0,
|
|
error="texts cannot be empty"
|
|
)
|
|
|
|
start_time = time.time()
|
|
|
|
# Encode texts with the model manager
|
|
embeddings = await model_manager.encode_texts(
|
|
request.texts,
|
|
batch_size=request.batch_size
|
|
)
|
|
|
|
processing_time = time.time() - start_time
|
|
|
|
# Convert to list format
|
|
embeddings_list = embeddings.tolist()
|
|
|
|
return EncodeResponse(
|
|
success=True,
|
|
embeddings=embeddings_list,
|
|
shape=list(embeddings.shape),
|
|
processing_time=processing_time,
|
|
total_texts=len(request.texts)
|
|
)
|
|
|
|
except Exception as e:
|
|
|
|
logger.error(f"Text encoding API error: {e}")
|
|
return EncodeResponse(
|
|
success=False,
|
|
embeddings=[],
|
|
shape=[0, 0],
|
|
processing_time=0.0,
|
|
total_texts=len(request.texts) if request else 0,
|
|
error=f"Encoding failed: {str(e)}"
|
|
)
|