Spaces:
Sleeping
Sleeping
| """ | |
| Context management router for Lily LLM API | |
| """ | |
| from fastapi import APIRouter, HTTPException, Form | |
| from typing import Optional | |
| import logging | |
| from ...models.schemas import ( | |
| ContextStatusResponse, ContextHistoryResponse, | |
| AutoCleanupConfigResponse, AutoCleanupConfigRequest | |
| ) | |
| logger = logging.getLogger(__name__) | |
| router = APIRouter() | |
| async def get_context_status(): | |
| """์ปจํ ์คํธ ๊ด๋ฆฌ์ ์ํ ํ์ธ""" | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| return ContextStatusResponse( | |
| status="error", | |
| context_manager_available=False, | |
| total_sessions=0, | |
| sessions={}, | |
| max_tokens=0, | |
| max_turns=0, | |
| strategy="unknown", | |
| message="Context manager not available" | |
| ) | |
| # ์ธ์ ๋ณ ์ ๋ณด ์์ง | |
| session_info = {} | |
| for session_id, conversation in context_manager.session_conversations.items(): | |
| session_info[session_id] = { | |
| "turns": len(conversation), | |
| "user_messages": len([t for t in conversation if t.role == "user"]), | |
| "assistant_messages": len([t for t in conversation if t.role == "assistant"]) | |
| } | |
| return ContextStatusResponse( | |
| status="success", | |
| context_manager_available=True, | |
| total_sessions=len(context_manager.session_conversations), | |
| sessions=session_info, | |
| max_tokens=getattr(context_manager, 'max_tokens', 0), | |
| max_turns=getattr(context_manager, 'max_turns', 0), | |
| strategy=getattr(context_manager, 'strategy', 'unknown') | |
| ) | |
| except ImportError: | |
| return ContextStatusResponse( | |
| status="error", | |
| context_manager_available=False, | |
| total_sessions=0, | |
| sessions={}, | |
| max_tokens=0, | |
| max_turns=0, | |
| strategy="unknown", | |
| message="Context manager import failed" | |
| ) | |
| except Exception as e: | |
| logger.error(f"์ปจํ ์คํธ ์ํ ํ์ธ ์คํจ: {e}") | |
| return ContextStatusResponse( | |
| status="error", | |
| context_manager_available=False, | |
| total_sessions=0, | |
| sessions={}, | |
| max_tokens=0, | |
| max_turns=0, | |
| strategy="unknown", | |
| message=str(e) | |
| ) | |
| async def get_context_history(session_id: str = None): | |
| """์ปจํ ์คํธ ํ์คํ ๋ฆฌ ์กฐํ""" | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| return ContextHistoryResponse( | |
| status="error", | |
| context="", | |
| history_length=0, | |
| message="Context manager not available" | |
| ) | |
| if session_id: | |
| # ํน์ ์ธ์ ์ ์ปจํ ์คํธ๋ง ์กฐํ | |
| context = context_manager.get_context(include_system=True, max_length=4000, session_id=session_id) | |
| session_summary = context_manager.get_context_summary(session_id) | |
| return ContextHistoryResponse( | |
| status="success", | |
| session_id=session_id, | |
| context=context, | |
| history_length=session_summary.get("total_turns", 0), | |
| session_summary=session_summary | |
| ) | |
| else: | |
| # ์ ์ฒด ์ปจํ ์คํธ ์กฐํ | |
| context = context_manager.get_context(include_system=True, max_length=4000) | |
| return ContextHistoryResponse( | |
| status="success", | |
| context=context, | |
| history_length=len(context_manager.conversation_history), | |
| all_sessions=True | |
| ) | |
| except ImportError: | |
| return ContextHistoryResponse( | |
| status="error", | |
| context="", | |
| history_length=0, | |
| message="Context manager import failed" | |
| ) | |
| except Exception as e: | |
| logger.error(f"์ปจํ ์คํธ ํ์คํ ๋ฆฌ ์กฐํ ์คํจ: {e}") | |
| return ContextHistoryResponse( | |
| status="error", | |
| context="", | |
| history_length=0, | |
| message=str(e) | |
| ) | |
| async def get_auto_cleanup_config(): | |
| """์๋ ์ ๋ฆฌ ์ค์ ์กฐํ""" | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| return AutoCleanupConfigResponse( | |
| status="error", | |
| auto_cleanup_config={}, | |
| message="Context manager not available" | |
| ) | |
| config = context_manager.get_auto_cleanup_config() | |
| return AutoCleanupConfigResponse( | |
| status="success", | |
| auto_cleanup_config=config | |
| ) | |
| except ImportError: | |
| return AutoCleanupConfigResponse( | |
| status="error", | |
| auto_cleanup_config={}, | |
| message="Context manager import failed" | |
| ) | |
| except Exception as e: | |
| logger.error(f"์๋ ์ ๋ฆฌ ์ค์ ์กฐํ ์คํจ: {e}") | |
| return AutoCleanupConfigResponse( | |
| status="error", | |
| auto_cleanup_config={}, | |
| message=str(e) | |
| ) | |
| async def set_auto_cleanup_config( | |
| enabled: bool = Form(True), | |
| interval_turns: int = Form(8), | |
| interval_time: int = Form(300), | |
| strategy: str = Form("smart") | |
| ): | |
| """์๋ ์ ๋ฆฌ ์ค์ ๋ณ๊ฒฝ""" | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| raise HTTPException(status_code=500, detail="Context manager not available") | |
| success = context_manager.set_auto_cleanup_config( | |
| enabled=enabled, | |
| interval_turns=interval_turns, | |
| interval_time=interval_time, | |
| strategy=strategy | |
| ) | |
| if success: | |
| return {"status": "success", "message": "์๋ ์ ๋ฆฌ ์ค์ ๋ณ๊ฒฝ ์๋ฃ"} | |
| else: | |
| raise HTTPException(status_code=500, detail="์๋ ์ ๋ฆฌ ์ค์ ๋ณ๊ฒฝ ์คํจ") | |
| except ImportError: | |
| raise HTTPException(status_code=500, detail="Context manager import failed") | |
| except Exception as e: | |
| logger.error(f"์๋ ์ ๋ฆฌ ์ค์ ๋ณ๊ฒฝ ์คํจ: {e}") | |
| raise HTTPException(status_code=500, detail=f"์๋ ์ ๋ฆฌ ์ค์ ๋ณ๊ฒฝ ์คํจ: {str(e)}") | |
| async def cleanup_context(session_id: str = Form(None)): | |
| """์ปจํ ์คํธ ์ ๋ฆฌ""" | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| raise HTTPException(status_code=500, detail="Context manager not available") | |
| if session_id: | |
| # ํน์ ์ธ์ ์ ๋ฆฌ | |
| success = context_manager.cleanup_session(session_id) | |
| if success: | |
| return {"status": "success", "message": f"์ธ์ {session_id} ์ ๋ฆฌ ์๋ฃ"} | |
| else: | |
| raise HTTPException(status_code=500, detail=f"์ธ์ {session_id} ์ ๋ฆฌ ์คํจ") | |
| else: | |
| # ์ ์ฒด ์ปจํ ์คํธ ์ ๋ฆฌ | |
| success = context_manager.cleanup_context() | |
| if success: | |
| return {"status": "success", "message": "์ ์ฒด ์ปจํ ์คํธ ์ ๋ฆฌ ์๋ฃ"} | |
| else: | |
| raise HTTPException(status_code=500, detail="์ ์ฒด ์ปจํ ์คํธ ์ ๋ฆฌ ์คํจ") | |
| except ImportError: | |
| raise HTTPException(status_code=500, detail="Context manager import failed") | |
| except Exception as e: | |
| logger.error(f"์ปจํ ์คํธ ์ ๋ฆฌ ์คํจ: {e}") | |
| raise HTTPException(status_code=500, detail=f"์ปจํ ์คํธ ์ ๋ฆฌ ์คํจ: {str(e)}") | |
| async def generate_context_summary(session_id: str = Form(...)): | |
| """์ปจํ ์คํธ ์์ฝ ์์ฑ""" | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| raise HTTPException(status_code=500, detail="Context manager not available") | |
| summary = context_manager.generate_summary(session_id) | |
| if summary: | |
| return {"status": "success", "summary": summary} | |
| else: | |
| raise HTTPException(status_code=500, detail="์ปจํ ์คํธ ์์ฝ ์์ฑ ์คํจ") | |
| except ImportError: | |
| raise HTTPException(status_code=500, detail="Context manager import failed") | |
| except Exception as e: | |
| logger.error(f"์ปจํ ์คํธ ์์ฝ ์์ฑ ์คํจ: {e}") | |
| raise HTTPException(status_code=500, detail=f"์ปจํ ์คํธ ์์ฝ ์์ฑ ์คํจ: {str(e)}") | |
| async def delete_session(session_id: str): | |
| """ํน์ ์ธ์ ์ญ์ """ | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| raise HTTPException(status_code=500, detail="Context manager not available") | |
| success = context_manager.delete_session(session_id) | |
| if success: | |
| return {"status": "success", "message": f"์ธ์ {session_id} ์ญ์ ์๋ฃ"} | |
| else: | |
| raise HTTPException(status_code=500, detail=f"์ธ์ {session_id} ์ญ์ ์คํจ") | |
| except ImportError: | |
| raise HTTPException(status_code=500, detail="Context manager import failed") | |
| except Exception as e: | |
| logger.error(f"์ธ์ ์ญ์ ์คํจ: {e}") | |
| raise HTTPException(status_code=500, detail=f"์ธ์ ์ญ์ ์คํจ: {str(e)}") | |
| async def list_sessions(): | |
| """์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ ๋ชฉ๋ก""" | |
| try: | |
| try: | |
| from lily_llm_core.context_manager import context_manager | |
| if not context_manager: | |
| raise HTTPException(status_code=500, detail="Context manager not available") | |
| sessions = list(context_manager.session_conversations.keys()) | |
| return {"status": "success", "sessions": sessions} | |
| except ImportError: | |
| raise HTTPException(status_code=500, detail="Context manager import failed") | |
| except Exception as e: | |
| logger.error(f"์ธ์ ๋ชฉ๋ก ์กฐํ ์คํจ: {e}") | |
| raise HTTPException(status_code=500, detail=f"์ธ์ ๋ชฉ๋ก ์กฐํ ์คํจ: {str(e)}") | |