Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions autobot-backend/api/knowledge_audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
from fastapi import APIRouter, Depends, HTTPException, Query, Request
from pydantic import BaseModel, Field

from api.schemas_common import (
KnowledgeAuditEventsResponse,
KnowledgeComplianceReportResponse,
KnowledgePermissionChangesResponse,
)
from auth_middleware import get_current_user
from autobot_shared.models.pagination import PaginationParams
from knowledge.audit_log import AuditEventType, KnowledgeAuditLog
Expand Down Expand Up @@ -70,7 +75,7 @@ async def _get_audit_log(kb) -> KnowledgeAuditLog:
# =============================================================================


@router.get("/user-activity")
@router.get("/user-activity", response_model=KnowledgeAuditEventsResponse)
async def get_user_activity_log(
request: Request,
current_user: Dict = Depends(get_current_user),
Expand Down Expand Up @@ -112,7 +117,7 @@ async def get_user_activity_log(
raise HTTPException(status_code=500, detail="Internal server error")


@router.get("/fact/{fact_id}/access-log")
@router.get("/fact/{fact_id}/access-log", response_model=KnowledgeAuditEventsResponse)
async def get_fact_access_log(
fact_id: str,
request: Request,
Expand Down Expand Up @@ -175,7 +180,7 @@ async def get_fact_access_log(
raise HTTPException(status_code=500, detail="Internal server error")


@router.get("/organization/audit-log")
@router.get("/organization/audit-log", response_model=KnowledgeAuditEventsResponse)
async def get_organization_audit_log(
request: Request,
current_user: Dict = Depends(get_current_user),
Expand Down Expand Up @@ -241,7 +246,7 @@ async def get_organization_audit_log(
# =============================================================================


@router.get("/permission-changes")
@router.get("/permission-changes", response_model=KnowledgePermissionChangesResponse)
async def get_permission_changes(
request: Request,
current_user: Dict = Depends(get_current_user),
Expand Down Expand Up @@ -290,7 +295,7 @@ async def get_permission_changes(
# =============================================================================


@router.post("/compliance-report")
@router.post("/compliance-report", response_model=KnowledgeComplianceReportResponse)
async def generate_compliance_report(
report_request: ComplianceReportRequest,
request: Request,
Expand Down Expand Up @@ -359,7 +364,7 @@ async def generate_compliance_report(
raise HTTPException(status_code=500, detail="Internal server error")


@router.get("/compliance-summary")
@router.get("/compliance-summary", response_model=KnowledgeComplianceReportResponse)
async def get_compliance_summary(
request: Request,
current_user: Dict = Depends(get_current_user),
Expand Down
11 changes: 8 additions & 3 deletions autobot-backend/api/knowledge_boards.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@
from fastapi import APIRouter, Depends, HTTPException, Request
from pydantic import BaseModel, Field, field_validator

from api.schemas_common import (
KnowledgeBoardCreateResponse,
KnowledgeBoardDeleteResponse,
KnowledgeBoardsListResponse,
)
from auth_middleware import check_admin_permission
from autobot_shared.error_boundaries import ErrorCategory, with_error_handling
from knowledge_factory import get_or_create_knowledge_base
Expand Down Expand Up @@ -103,7 +108,7 @@ async def _get_redis(req: Request):
operation="list_boards",
error_code_prefix="KB_BOARDS",
)
@router.get("/boards")
@router.get("/boards", response_model=KnowledgeBoardsListResponse)
async def list_boards(
admin_check: bool = Depends(check_admin_permission),
req: Request = None,
Expand Down Expand Up @@ -139,7 +144,7 @@ async def list_boards(
operation="create_board",
error_code_prefix="KB_BOARDS",
)
@router.post("/boards", status_code=201)
@router.post("/boards", status_code=201, response_model=KnowledgeBoardCreateResponse)
async def create_board(
request: CreateBoardRequest = None,
admin_check: bool = Depends(check_admin_permission),
Expand Down Expand Up @@ -170,7 +175,7 @@ async def create_board(
operation="delete_board",
error_code_prefix="KB_BOARDS",
)
@router.delete("/boards/{board_id}")
@router.delete("/boards/{board_id}", response_model=KnowledgeBoardDeleteResponse)
async def delete_board(
board_id: str,
admin_check: bool = Depends(check_admin_permission),
Expand Down
8 changes: 6 additions & 2 deletions autobot-backend/api/knowledge_cognition.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
from fastapi import APIRouter, BackgroundTasks, HTTPException
from pydantic import BaseModel

from api.schemas_common import (
KnowledgeCognitionSeedResponse,
KnowledgeCognitionStatusResponse,
)
from auth_middleware import check_admin_permission
from constants.path_constants import PATH
from services.knowledge.cognition_seeder import get_cognition_seeder
Expand All @@ -34,7 +38,7 @@ class SeedRequest(BaseModel):
manifest_path: str = _DEFAULT_MANIFEST


@router.get("/cognition-store/status")
@router.get("/cognition-store/status", response_model=KnowledgeCognitionStatusResponse)
async def get_cognition_store_status():
"""Return seed status for all ChromaDB collections that contain seeded docs.

Expand Down Expand Up @@ -67,7 +71,7 @@ async def _run_seed(manifest_path: str) -> None:
logger.error("Background seed failed: manifest=%s error=%s", manifest_path, exc)


@router.post("/cognition-store/seed")
@router.post("/cognition-store/seed", response_model=KnowledgeCognitionSeedResponse)
async def trigger_cognition_seed(
request: SeedRequest,
background_tasks: BackgroundTasks,
Expand Down
21 changes: 14 additions & 7 deletions autobot-backend/api/knowledge_collaboration.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@
from fastapi import APIRouter, Depends, HTTPException, Query, Request
from pydantic import BaseModel, Field

from api.schemas_common import (
KnowledgeAccessInfoResponse,
KnowledgePermissionsUpdateResponse,
KnowledgeScopedFactsResponse,
KnowledgeShareResponse,
KnowledgeUnshareResponse,
)
from auth_middleware import get_current_user
from autobot_shared.models.pagination import PaginationParams
from knowledge.ownership import VisibilityLevel
Expand Down Expand Up @@ -275,7 +282,7 @@ async def _unshare_fact_by_entity(
# =============================================================================


@router.get("/facts")
@router.get("/facts", response_model=KnowledgeScopedFactsResponse)
async def get_knowledge_by_scope(
request: Request,
current_user: Dict = Depends(get_current_user),
Expand Down Expand Up @@ -332,7 +339,7 @@ async def get_knowledge_by_scope(
raise HTTPException(status_code=500, detail="Internal server error")


@router.get("/facts/organization/{organization_id}")
@router.get("/facts/organization/{organization_id}", response_model=KnowledgeScopedFactsResponse)
async def get_organization_knowledge(
organization_id: str,
request: Request,
Expand Down Expand Up @@ -381,7 +388,7 @@ async def get_organization_knowledge(
raise HTTPException(status_code=500, detail="Internal server error")


@router.get("/facts/group/{group_id}")
@router.get("/facts/group/{group_id}", response_model=KnowledgeScopedFactsResponse)
async def get_group_knowledge(
group_id: str,
request: Request,
Expand Down Expand Up @@ -432,7 +439,7 @@ async def get_group_knowledge(
# =============================================================================


@router.post("/facts/{fact_id}/share")
@router.post("/facts/{fact_id}/share", response_model=KnowledgeShareResponse)
async def share_knowledge(
fact_id: str,
share_request: ShareKnowledgeRequest,
Expand Down Expand Up @@ -497,7 +504,7 @@ async def share_knowledge(
raise HTTPException(status_code=500, detail="Internal server error")


@router.delete("/facts/{fact_id}/share/{entity_id}")
@router.delete("/facts/{fact_id}/share/{entity_id}", response_model=KnowledgeUnshareResponse)
async def unshare_knowledge(
fact_id: str,
entity_id: str,
Expand Down Expand Up @@ -556,7 +563,7 @@ async def unshare_knowledge(
raise HTTPException(status_code=500, detail="Internal server error")


@router.put("/facts/{fact_id}/permissions")
@router.put("/facts/{fact_id}/permissions", response_model=KnowledgePermissionsUpdateResponse)
async def update_knowledge_permissions(
fact_id: str,
permissions_request: UpdatePermissionsRequest,
Expand Down Expand Up @@ -619,7 +626,7 @@ async def update_knowledge_permissions(
raise HTTPException(status_code=500, detail="Internal server error")


@router.get("/facts/{fact_id}/access")
@router.get("/facts/{fact_id}/access", response_model=KnowledgeAccessInfoResponse)
async def get_knowledge_access_info(
fact_id: str, request: Request, current_user: Dict = Depends(get_current_user)
):
Expand Down
11 changes: 8 additions & 3 deletions autobot-backend/api/knowledge_debug.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@

from fastapi import APIRouter, Depends, Request

from api.schemas_common import (
KnowledgeDebugRedisResponse,
KnowledgeFreshStatsResponse,
KnowledgeRebuildIndexResponse,
)
from auth_middleware import check_admin_permission
from autobot_shared.error_boundaries import ErrorCategory, with_error_handling
from autobot_shared.redis_management.types import DATABASE_MAPPING
Expand All @@ -27,7 +32,7 @@
operation="get_fresh_knowledge_stats",
error_code_prefix="KNOWLEDGE_FRESH",
)
@router.get("/fresh_stats")
@router.get("/fresh_stats", response_model=KnowledgeFreshStatsResponse)
async def get_fresh_knowledge_stats(request: Request = None):
"""Get knowledge base stats using a completely fresh instance (bypasses all cache)"""
try:
Expand Down Expand Up @@ -98,7 +103,7 @@ async def get_fresh_knowledge_stats(request: Request = None):
operation="debug_redis_connection",
error_code_prefix="KNOWLEDGE_FRESH",
)
@router.get("/debug_redis")
@router.get("/debug_redis", response_model=KnowledgeDebugRedisResponse)
async def debug_redis_connection():
"""Debug Redis connection and vector counts using canonical utility.

Expand Down Expand Up @@ -169,7 +174,7 @@ def _debug_redis_connection():
operation="rebuild_search_index",
error_code_prefix="KNOWLEDGE_FRESH",
)
@router.post("/rebuild_index")
@router.post("/rebuild_index", response_model=KnowledgeRebuildIndexResponse)
async def rebuild_search_index():
"""Rebuild the search index to sync vectors with search index"""
try:
Expand Down
17 changes: 12 additions & 5 deletions autobot-backend/api/knowledge_grounding.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@
from pydantic import BaseModel, Field

from api.knowledge_models import SearchRequest
from api.schemas_common import (
KnowledgeConflictsListResponse,
KnowledgeGroundingStatsResponse,
KnowledgeGroundResponseResponse,
KnowledgeResolveConflictResponse,
KnowledgeVerifyClaimResponse,
)
from auth_middleware import check_admin_permission, get_current_user
from autobot_shared.error_boundaries import ErrorCategory, with_error_handling
from constants.threshold_constants import QueryDefaults
Expand Down Expand Up @@ -108,7 +115,7 @@ class ConflictSchema(BaseModel):
# ===== ENDPOINTS =====


@router.post("/ground-response")
@router.post("/ground-response", response_model=KnowledgeGroundResponseResponse)
@with_error_handling(
category=ErrorCategory.SERVER_ERROR,
operation="ground_response",
Expand Down Expand Up @@ -187,7 +194,7 @@ async def ground_response(
}


@router.post("/verify-claim")
@router.post("/verify-claim", response_model=KnowledgeVerifyClaimResponse)
@with_error_handling(
category=ErrorCategory.SERVER_ERROR,
operation="verify_claim",
Expand Down Expand Up @@ -260,7 +267,7 @@ async def verify_claim(
}


@router.get("/kb-conflicts")
@router.get("/kb-conflicts", response_model=KnowledgeConflictsListResponse)
@with_error_handling(
category=ErrorCategory.SERVER_ERROR,
operation="list_conflicts",
Expand Down Expand Up @@ -396,7 +403,7 @@ async def list_conflicts(
}


@router.post("/kb-conflicts/{conflict_id}/resolve")
@router.post("/kb-conflicts/{conflict_id}/resolve", response_model=KnowledgeResolveConflictResponse)
@with_error_handling(
category=ErrorCategory.SERVER_ERROR,
operation="resolve_conflict",
Expand Down Expand Up @@ -461,7 +468,7 @@ async def resolve_conflict(
}


@router.get("/kb-stats")
@router.get("/kb-stats", response_model=KnowledgeGroundingStatsResponse)
@with_error_handling(
category=ErrorCategory.SERVER_ERROR,
operation="get_stats",
Expand Down
13 changes: 9 additions & 4 deletions autobot-backend/api/knowledge_organization.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@
from fastapi import APIRouter, Depends, HTTPException, Request
from pydantic import BaseModel, Field

from api.schemas_common import (
KnowledgeOrganizationCleanupResponse,
KnowledgeOrganizationPolicyResponse,
KnowledgeOrganizationStatsResponse,
)
from auth_middleware import get_current_user
from knowledge.ownership import VisibilityLevel
from knowledge_factory import get_or_create_knowledge_base
Expand Down Expand Up @@ -75,7 +80,7 @@ class UpdateOrganizationPolicyRequest(BaseModel):
# =============================================================================


@router.get("/policy")
@router.get("/policy", response_model=KnowledgeOrganizationPolicyResponse)
async def get_organization_policy(
request: Request, current_user: Dict = Depends(get_current_user)
):
Expand Down Expand Up @@ -119,7 +124,7 @@ async def get_organization_policy(
raise HTTPException(status_code=500, detail="Internal server error")


@router.put("/policy")
@router.put("/policy", response_model=KnowledgeOrganizationPolicyResponse)
async def update_organization_policy(
policy_request: UpdateOrganizationPolicyRequest,
request: Request,
Expand Down Expand Up @@ -244,7 +249,7 @@ def _get_organization_team_count(current_user: Dict) -> int:
)


@router.get("/stats")
@router.get("/stats", response_model=KnowledgeOrganizationStatsResponse)
async def get_organization_knowledge_stats(
request: Request, current_user: Dict = Depends(get_current_user)
):
Expand Down Expand Up @@ -343,7 +348,7 @@ async def _delete_expired_facts(kb, fact_ids: list, cutoff_date) -> int:
return deleted_count


@router.delete("/cleanup")
@router.delete("/cleanup", response_model=KnowledgeOrganizationCleanupResponse)
async def cleanup_organization_knowledge(
request: Request,
current_user: Dict = Depends(get_current_user),
Expand Down
Loading
Loading