Download apps/litigation_ai/api/litigation_api.py from jun2024/fc: direct link, hf CLI and curl.
- Browser
- Download file 6.61 kB
-
https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/litigation_ai/api/litigation_api.py
- Command line
-
hf download hf://spaces/jun2024/fc/apps/litigation_ai/api/litigation_api.py
-
curl -L -o litigation_api.py https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/litigation_ai/api/litigation_api.py
6.61 kB
| """API endpoints.""" | |
| import logging | |
| from typing import Any | |
| from django.http import HttpRequest | |
| from ninja import Router, Status | |
| from apps.core.infrastructure.throttling import rate_limit_from_settings | |
| from apps.core.security.auth import JWTOrSessionAuth | |
| from .schemas import ( | |
| CreateSessionRequest, | |
| ErrorResponse, | |
| GenerateDocumentRequest, | |
| GenerateDocumentResponse, | |
| MessageListResponse, | |
| SessionDetailResponse, | |
| SessionListResponse, | |
| SessionResponse, | |
| UpdateSessionStatusRequest, | |
| ) | |
| logger = logging.getLogger(__name__) | |
| router = Router(tags=["AI 诉讼文书生成"], auth=JWTOrSessionAuth()) | |
| def _get_conversation_service() -> Any: | |
| from apps.litigation_ai.services import LitigationConversationService | |
| return LitigationConversationService() | |
| def _get_document_generator_service() -> Any: | |
| from apps.litigation_ai.services import DocumentGeneratorService | |
| return DocumentGeneratorService() | |
| def create_session(request: HttpRequest, payload: CreateSessionRequest) -> Any: | |
| service = _get_conversation_service() | |
| user = getattr(request, "user", None) | |
| session = service.create_session(case_id=payload.case_id, user_id=user.id if user else None) | |
| recommended_types = service.get_recommended_document_types(payload.case_id) | |
| return { | |
| "session_id": session.session_id, | |
| "case_id": session.case_id, | |
| "document_type": session.document_type, | |
| "status": session.status, | |
| "metadata": session.metadata, | |
| "created_at": session.created_at, | |
| "updated_at": session.updated_at, | |
| "messages": [], | |
| "recommended_types": recommended_types, | |
| } | |
| def list_sessions( | |
| request: HttpRequest, case_id: int | None = None, status: str | None = None, limit: int = 20, offset: int = 0 | |
| ) -> Any: | |
| service = _get_conversation_service() | |
| user = getattr(request, "user", None) | |
| sessions_data = service.list_sessions( | |
| user_id=user.id if user else None, | |
| case_id=case_id, | |
| status=status, | |
| session_type="doc_gen", | |
| limit=limit, | |
| offset=offset, | |
| ) | |
| return {"count": sessions_data["total"], "results": sessions_data["sessions"]} | |
| def get_session(request: HttpRequest, session_id: str) -> Any: | |
| service = _get_conversation_service() | |
| session = service.get_session(session_id) | |
| messages = service.get_messages(session_id) | |
| recommended_types = service.get_recommended_document_types(session.case_id) | |
| return { | |
| "session_id": session.session_id, | |
| "case_id": session.case_id, | |
| "document_type": session.document_type, | |
| "status": session.status, | |
| "metadata": session.metadata, | |
| "created_at": session.created_at, | |
| "updated_at": session.updated_at, | |
| "messages": [ | |
| { | |
| "id": msg.id, | |
| "role": msg.role, | |
| "content": msg.content, | |
| "metadata": msg.metadata, | |
| "created_at": msg.created_at, | |
| } | |
| for msg in messages | |
| ], | |
| "recommended_types": recommended_types, | |
| } | |
| def get_messages(request: HttpRequest, session_id: str, limit: int = 50, offset: int = 0) -> Any: | |
| service = _get_conversation_service() | |
| messages = service.get_messages(session_id, limit=limit, offset=offset) | |
| total = service.get_message_count(session_id) | |
| return { | |
| "messages": [ | |
| { | |
| "id": msg.id, | |
| "role": msg.role, | |
| "content": msg.content, | |
| "metadata": msg.metadata, | |
| "created_at": msg.created_at, | |
| } | |
| for msg in messages | |
| ], | |
| "total": total, | |
| "limit": limit, | |
| "offset": offset, | |
| } | |
| def update_session_status(request: HttpRequest, session_id: str, payload: UpdateSessionStatusRequest) -> Any: | |
| service = _get_conversation_service() | |
| session = service.update_session_status(session_id, payload.status) | |
| return { | |
| "session_id": session.session_id, | |
| "case_id": session.case_id, | |
| "document_type": session.document_type, | |
| "status": session.status, | |
| "metadata": session.metadata, | |
| "created_at": session.created_at, | |
| "updated_at": session.updated_at, | |
| } | |
| def delete_session(request: HttpRequest, session_id: str) -> Any: | |
| service = _get_conversation_service() | |
| user = getattr(request, "user", None) | |
| service.delete_session(session_id, user) | |
| return Status(204, None) | |
| def generate_document(request: HttpRequest, session_id: str, payload: GenerateDocumentRequest) -> Any: | |
| service = _get_document_generator_service() | |
| conversation_service = _get_conversation_service() | |
| conversation_service.get_session(session_id) | |
| task = service.generate_document(session_id=session_id, template_id=payload.template_id) | |
| return { | |
| "task_id": task.id, | |
| "document_name": task.document_name, | |
| "document_url": task.document_url, | |
| "status": task.status, | |
| "created_at": task.created_at, | |
| } | |
| def get_task_status(request: HttpRequest, task_id: int) -> Any: | |
| service = _get_document_generator_service() | |
| user = getattr(request, "user", None) | |
| task = service.get_task_status(task_id, user) | |
| return { | |
| "task_id": task.id, | |
| "document_name": task.document_name, | |
| "document_url": task.document_url if task.document_url else None, | |
| "status": task.status, | |
| "created_at": task.created_at, | |
| } | |