|
|
from typing import List, Dict, Any, Optional |
|
|
from pydantic import BaseModel |
|
|
|
|
|
|
|
|
class ExplanationRequest(BaseModel): |
|
|
query: str |
|
|
|
|
|
class ExplanationResponse(BaseModel): |
|
|
summary: str |
|
|
key_point: str |
|
|
explanation: str |
|
|
next_steps: str |
|
|
sources: List[Dict[str, Any]] |
|
|
query: str |
|
|
|
|
|
|
|
|
class ChatRequest(BaseModel): |
|
|
query: str |
|
|
conversation_id: Optional[str] = None |
|
|
|
|
|
class ChatResponse(BaseModel): |
|
|
summary: str |
|
|
key_point: str |
|
|
explanation: str |
|
|
next_steps: str |
|
|
sources: List[Dict[str, Any]] |
|
|
query: str |
|
|
context_used: Optional[bool] = False |
|
|
is_non_legal: Optional[bool] = False |
|
|
original_query: Optional[str] = None |
|
|
summarized_query: Optional[str] = None |
|
|
suggested_action: Optional[Dict[str, str]] = None |
|
|
|
|
|
|
|
|
class LetterGenerationRequest(BaseModel): |
|
|
description: str |
|
|
template_name: Optional[str] = None |
|
|
additional_data: Optional[Dict[str, str]] = None |
|
|
|
|
|
class LetterGenerationResponse(BaseModel): |
|
|
success: bool |
|
|
letter: Optional[str] = None |
|
|
template_used: Optional[str] = None |
|
|
detected_placeholders: Optional[List[str]] = None |
|
|
missing_fields: Optional[List[str]] = None |
|
|
error: Optional[str] = None |
|
|
method: Optional[str] = None |
|
|
|
|
|
|
|
|
class TemplateSearchRequest(BaseModel): |
|
|
query: str |
|
|
|
|
|
class TemplateSearchResponse(BaseModel): |
|
|
success: bool |
|
|
template_name: Optional[str] = None |
|
|
score: Optional[float] = None |
|
|
content: Optional[str] = None |
|
|
error: Optional[str] = None |
|
|
|
|
|
class TemplateDetailsRequest(BaseModel): |
|
|
template_name: str |
|
|
|
|
|
class TemplateDetailsResponse(BaseModel): |
|
|
success: bool |
|
|
template_name: Optional[str] = None |
|
|
placeholders: Optional[List[str]] = None |
|
|
content: Optional[str] = None |
|
|
error: Optional[str] = None |
|
|
|
|
|
class TemplateFillRequest(BaseModel): |
|
|
template_name: str |
|
|
placeholders: Dict[str, str] |
|
|
|
|
|
class TemplateFillResponse(BaseModel): |
|
|
success: bool |
|
|
letter: Optional[str] = None |
|
|
error: Optional[str] = None |
|
|
|
|
|
|
|
|
class BiasDetectionRequest(BaseModel): |
|
|
text: str |
|
|
confidence_threshold: Optional[float] = 0.7 |
|
|
|
|
|
class BiasResult(BaseModel): |
|
|
sentence: str |
|
|
category: str |
|
|
confidence: float |
|
|
is_biased: bool |
|
|
|
|
|
class BiasDetectionResponse(BaseModel): |
|
|
success: bool |
|
|
total_sentences: int |
|
|
biased_count: int |
|
|
neutral_count: int |
|
|
results: List[BiasResult] |
|
|
error: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
class BatchBiasDetectionRequest(BaseModel): |
|
|
texts: List[str] |
|
|
confidence_threshold: Optional[float] = 0.7 |
|
|
|
|
|
|
|
|
class BatchBiasItem(BaseModel): |
|
|
index: int |
|
|
input_text: str |
|
|
result: BiasDetectionResponse |
|
|
|
|
|
|
|
|
class BatchBiasDetectionResponse(BaseModel): |
|
|
success: bool |
|
|
items: List[BatchBiasItem] |
|
|
error: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
class DebiasSentenceRequest(BaseModel): |
|
|
sentence: str |
|
|
category: str |
|
|
context: Optional[str] = None |
|
|
|
|
|
|
|
|
class DebiasSentenceResponse(BaseModel): |
|
|
success: bool |
|
|
original_sentence: str |
|
|
category: str |
|
|
suggestion: Optional[str] = None |
|
|
rationale: Optional[str] = None |
|
|
error: Optional[str] = None |
|
|
|
|
|
|
|
|
class DebiasBatchItem(BaseModel): |
|
|
index: int |
|
|
input: DebiasSentenceRequest |
|
|
result: DebiasSentenceResponse |
|
|
|
|
|
|
|
|
class DebiasBatchRequest(BaseModel): |
|
|
items: List[DebiasSentenceRequest] |
|
|
|
|
|
|
|
|
class DebiasBatchResponse(BaseModel): |
|
|
success: bool |
|
|
items: List[DebiasBatchItem] |
|
|
error: Optional[str] = None |
|
|
|
|
|
|
|
|
class PDFProcessingResponse(BaseModel): |
|
|
success: bool |
|
|
sentences: List[str] |
|
|
total_sentences: int |
|
|
raw_text: Optional[str] = None |
|
|
filename: Optional[str] = None |
|
|
error: Optional[str] = None |
|
|
|
|
|
class PDFToBiasDetectionRequest(BaseModel): |
|
|
|
|
|
|
|
|
|
|
|
pass |
|
|
|
|
|
class PDFToBiasDetectionResponse(BaseModel): |
|
|
success: bool |
|
|
total_sentences: int |
|
|
biased_count: int |
|
|
neutral_count: int |
|
|
results: List[BiasResult] |
|
|
filename: Optional[str] = None |
|
|
error: Optional[str] = None |
|
|
|
|
|
|
|
|
class BiasReviewItem(BaseModel): |
|
|
sentence_id: str |
|
|
original_sentence: str |
|
|
is_biased: bool |
|
|
category: str |
|
|
confidence: float |
|
|
suggestion: Optional[str] = None |
|
|
approved_suggestion: Optional[str] = None |
|
|
status: str = "pending" |
|
|
|
|
|
class BiasReviewSession(BaseModel): |
|
|
session_id: str |
|
|
original_filename: str |
|
|
sentences: List[BiasReviewItem] |
|
|
raw_text: str |
|
|
pdf_bytes: Optional[bytes] = None |
|
|
created_at: str |
|
|
status: str = "pending_review" |
|
|
|
|
|
class StartReviewResponse(BaseModel): |
|
|
success: bool |
|
|
session_id: str |
|
|
total_sentences: int |
|
|
biased_count: int |
|
|
neutral_count: int |
|
|
sentences: List[BiasReviewItem] |
|
|
filename: str |
|
|
error: Optional[str] = None |
|
|
|
|
|
class ApprovalRequest(BaseModel): |
|
|
session_id: str |
|
|
sentence_id: str |
|
|
action: str |
|
|
approved_suggestion: Optional[str] = None |
|
|
|
|
|
class ApprovalResponse(BaseModel): |
|
|
success: bool |
|
|
sentence_id: str |
|
|
message: str |
|
|
error: Optional[str] = None |
|
|
|
|
|
class RegenerateSuggestionRequest(BaseModel): |
|
|
session_id: str |
|
|
sentence_id: str |
|
|
|
|
|
class RegenerateSuggestionResponse(BaseModel): |
|
|
success: bool |
|
|
sentence_id: str |
|
|
new_suggestion: Optional[str] = None |
|
|
error: Optional[str] = None |
|
|
|
|
|
class GeneratePDFRequest(BaseModel): |
|
|
session_id: str |
|
|
|
|
|
class GeneratePDFResponse(BaseModel): |
|
|
success: bool |
|
|
pdf_filename: Optional[str] = None |
|
|
pdf_content: Optional[bytes] = None |
|
|
changes_applied: int |
|
|
error: Optional[str] = None |
|
|
|
|
|
class SessionStatusResponse(BaseModel): |
|
|
success: bool |
|
|
session_id: str |
|
|
status: str |
|
|
total_sentences: int |
|
|
pending_count: int |
|
|
approved_count: int |
|
|
needs_regeneration_count: int |
|
|
sentences: List[BiasReviewItem] |
|
|
error: Optional[str] = None |
|
|
|
|
|
|
|
|
class ConversationCreate(BaseModel): |
|
|
title: Optional[str] = "New Conversation" |
|
|
|
|
|
class ConversationUpdate(BaseModel): |
|
|
title: Optional[str] = None |
|
|
|
|
|
class MessageCreate(BaseModel): |
|
|
role: str |
|
|
content: str |
|
|
metadata: Optional[Dict[str, Any]] = None |
|
|
|
|
|
class MessageResponse(BaseModel): |
|
|
id: str |
|
|
conversation_id: str |
|
|
role: str |
|
|
content: str |
|
|
timestamp: str |
|
|
metadata: Optional[Dict[str, Any]] = None |
|
|
|
|
|
class ConversationResponse(BaseModel): |
|
|
id: str |
|
|
user_id: str |
|
|
title: str |
|
|
created_at: str |
|
|
updated_at: str |
|
|
message_count: Optional[int] = None |
|
|
|
|
|
class ConversationDetailResponse(BaseModel): |
|
|
id: str |
|
|
user_id: str |
|
|
title: str |
|
|
created_at: str |
|
|
updated_at: str |
|
|
messages: List[MessageResponse] |
|
|
message_count: int |
|
|
|