# # Copyright (C) 2020 GNS3 Technologies Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from fastapi import APIRouter, Depends, HTTPException, status # Check AI Copilot availability from gns3server.agent import AI_COPILOT_AVAILABLE # Conditionally import AI-dependent routes if AI_COPILOT_AVAILABLE: from . import chat from . import copilot from . import llm_model_configs _chat_router = chat.router _copilot_router = copilot.router _llm_router = llm_model_configs.router else: # Create stub routers that return 501 for all AI endpoints _chat_router = APIRouter() _copilot_router = APIRouter() _llm_router = APIRouter() @_chat_router.api_route("/{path:path}", methods=["GET", "POST", "DELETE", "PATCH", "PUT"]) @_copilot_router.api_route("/{path:path}", methods=["GET", "POST", "DELETE", "PATCH", "PUT"]) @_llm_router.api_route("/{path:path}", methods=["GET", "POST", "DELETE", "PATCH", "PUT"]) async def ai_not_available(path: str = ""): raise HTTPException( status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="AI Copilot is not available. Install AI dependencies with: pip install gns3-server[ai-features]", ) from . import controller from . import appliances from . import computes from . import drawings from . import gns3vm from . import links from . import nodes from . import projects from . import snapshots from . import symbols from . import templates from . import images from . import users from . import groups from . import roles from . import acl from . import pools from . import privileges from . import api_keys from . import netmiko from . import settings from .dependencies.authentication import get_current_active_user router = APIRouter() router.include_router(controller.router, tags=["Controller"]) router.include_router(settings.router, prefix="/settings", tags=["Server settings"]) router.include_router(users.router, prefix="/access/users", tags=["Users"]) router.include_router(groups.router, prefix="/access/groups", tags=["Users groups"]) router.include_router(roles.router, prefix="/access/roles", tags=["Roles"]) router.include_router( privileges.router, dependencies=[Depends(get_current_active_user)], prefix="/access/privileges", tags=["Privileges"] ) router.include_router(acl.router, prefix="/access/acl", tags=["ACL"]) router.include_router(images.router, prefix="/images", tags=["Images"]) router.include_router(templates.router, prefix="/templates", tags=["Templates"]) router.include_router(projects.router, prefix="/projects", tags=["Projects"]) router.include_router(nodes.router, prefix="/projects/{project_id}/nodes", tags=["Nodes"]) router.include_router(links.router, prefix="/projects/{project_id}/links", tags=["Links"]) router.include_router(drawings.router, prefix="/projects/{project_id}/drawings", tags=["Drawings"]) router.include_router(symbols.router, prefix="/symbols", tags=["Symbols"]) router.include_router(snapshots.router, prefix="/projects/{project_id}/snapshots", tags=["Snapshots"]) router.include_router( computes.router, dependencies=[Depends(get_current_active_user)], prefix="/computes", tags=["Computes"] ) router.include_router(appliances.router, prefix="/appliances", tags=["Appliances"]) router.include_router(netmiko.router, prefix="/netmiko", tags=["Netmiko"]) router.include_router(pools.router, prefix="/pools", tags=["Resource pools"]) router.include_router( gns3vm.router, dependencies=[Depends(get_current_active_user)], deprecated=True, prefix="/gns3vm", tags=["GNS3 VM"] ) router.include_router( _llm_router, prefix="/access", dependencies=[Depends(get_current_active_user)], tags=["LLM Model Configurations"] ) router.include_router( _copilot_router, prefix="/copilot", dependencies=[Depends(get_current_active_user)], tags=["GNS3 Copilot"] ) router.include_router( _chat_router, prefix="/copilot/projects/{project_id}/chat", dependencies=[Depends(get_current_active_user)], tags=["GNS3 Copilot"], ) router.include_router(api_keys.router, dependencies=[Depends(get_current_active_user)], tags=["API Keys"])