"""Agency API urls definition."""
from django.urls import path, include, reverse
from django.shortcuts import render
from rest_framework import routers, permissions
from rest_framework.views import APIView
from rest_framework.decorators import api_view, permission_classes
from drf_spectacular import views as openapi
from agency import models as agency
from agency.api import views
from agency.api import threads as thread_views
from agency.api.overlay import UiOverlay
from agency.api.panels import UiPanelDetail, UiPanelList
from agency.display.api import urls as display_urls
app_name = "api"
endpoints = {
"provider": views.view_set(
agency.Provider, True, serializer_class=views.provider_serializer()
),
"model": views.view_set(
agency.Model, True, serializer_class=views.model_serializer()
),
"execution": views.execution_view_set(),
"interruption": views.interruption_view_set(),
"workspace": views.workspace_view_set(),
"document": views.document_view_set(),
"agent": views.agent_view_set(),
"mission": views.mission_view_set(),
"tool": views.tool_view_set(),
"photo": views.photo_view_set(),
"task": views.task_view_set(),
"voices": views.view_set(agency.Voice, False),
"users": views.user_view_set(),
"groups": views.group_view_set(),
}
[docs]
@api_view(['GET'])
@permission_classes([permissions.AllowAny])
def api_index(request, format=None):
"""Default API index page."""
endpoint_urls = {}
for name in endpoints.keys():
endpoint_urls[name] = f"/api/{name}/"
context = {
'breadcrumblist': [
('OpenAPI', reverse('agency:api:schema')),
('Redoc', reverse('agency:api:redoc')),
('Swagger', reverse('agency:api:swagger-ui')),
],
'endpoints': endpoint_urls
}
return render(request, 'api/index.html', context)
router = routers.SimpleRouter()
"""DRF router for the API endpoints."""
for name, view in endpoints.items():
router.register(name, view, basename=name)
schema_view = openapi.SpectacularAPIView.as_view()
schema = {"url_name": "agency:api:schema"}
redoc_view = openapi.SpectacularRedocView.as_view(**schema)
swagger_view = openapi.SpectacularSwaggerView.as_view(**schema)
urlpatterns = [
path("", api_index, name="index"),
path("version/", views.Version.as_view(), name="version"),
path("system/info/", views.SystemInfo.as_view(), name="system_info"),
path("me/prefs/", views.MePrefs.as_view(), name="me_prefs"),
path("ui/overlay/", UiOverlay.as_view(), name="ui_overlay"),
path("ui/panels/", UiPanelList.as_view(), name="ui_panels"),
path("ui/panels/<uuid:panel_id>/", UiPanelDetail.as_view(), name="ui_panel"),
path("me/media/", views.MeMedia.as_view(), name="me_media"),
path("users/<int:user_id>/prefs/", views.UserPrefsStaff.as_view(), name="user_prefs_staff"),
path("users/<int:user_id>/threads/", thread_views.staff_user_threads, name="staff_user_threads"),
path("users/<int:user_id>/threads/<uuid:thread_id>/", thread_views.staff_thread_detail, name="staff_thread_detail"),
path("agent/<uuid:agent_id>/test/", views.agent_test, name="agent_test"),
path("agent/<uuid:agent_id>/threads/", thread_views.agent_thread_list, name="agent_threads"),
path("agent/<uuid:agent_id>/messages/", thread_views.agent_messages, name="agent_messages"),
path("thread/<uuid:thread_id>/", thread_views.thread_detail, name="thread_detail"),
path("thread/<uuid:thread_id>/messages/", thread_views.thread_messages, name="thread_messages"),
path("thread/<uuid:thread_id>/activate/", thread_views.thread_activate, name="thread_activate"),
path("thread/<uuid:thread_id>/archive/", thread_views.thread_archive, name="thread_archive"),
path("mission/<uuid:mission_id>/dispatch/", views.mission_dispatch, name="mission_dispatch"),
path("provider/<uuid:provider_id>/sync/", views.provider_sync, name="provider_sync"),
path("tool/sync/", views.tool_sync, name="tool_sync"),
path("document/<uuid:document_id>/reindex/", views.document_reindex, name="document_reindex"),
path("document/<uuid:document_id>/extraction/", views.document_extraction, name="document_extraction"),
path("workspace/<uuid:workspace_id>/search/", views.workspace_search, name="workspace_search"),
path("workspace/<uuid:workspace_id>/ask/", views.workspace_ask, name="workspace_ask"),
path("", include(display_urls)),
path("", include(router.urls)),
path("schema", schema_view, name="schema"),
path("redoc/", redoc_view, name="redoc"),
path("swagger-ui/", swagger_view, name="swagger-ui"),
]