diff --git a/agentic_security/routes/static.py b/agentic_security/routes/static.py index f14dd70..f65c24e 100644 --- a/agentic_security/routes/static.py +++ b/agentic_security/routes/static.py @@ -1,5 +1,5 @@ from pathlib import Path - +import requests from fastapi import APIRouter, HTTPException, Request from fastapi.responses import FileResponse, HTMLResponse from fastapi.templating import Jinja2Templates @@ -10,6 +10,7 @@ from ..models.schemas import Settings router = APIRouter() STATIC_DIR = Path(__file__).parent.parent / "static" +ICONS_DIR = STATIC_DIR / "icons" # Configure templates with custom delimiters to avoid conflicts templates = Jinja2Templates(directory=str(STATIC_DIR)) @@ -28,6 +29,8 @@ CONTENT_TYPES = { ".ico": "image/x-icon", ".html": "text/html", ".css": "text/css", + ".svg": "image/svg+xml", + ".png": "image/png", } @@ -88,3 +91,19 @@ async def telemetry_js() -> FileResponse: async def favicon() -> FileResponse: """Serve the favicon.""" return get_static_file(STATIC_DIR / "favicon.ico") + + +@router.get("/icons/{icon_name}") +async def serve_icon(icon_name: str) -> FileResponse: + """Serve an icon from the icons directory.""" + icon_path = ICONS_DIR / icon_name + if not icon_path.exists(): + # Fetch the icon from the external URL and cache it + url = f"https://registry.npmmirror.com/@lobehub/icons-static-png/latest/files/dark/{icon_name}" + response = requests.get(url) + if response.status_code == 200: + icon_path.write_bytes(response.content) + else: + raise HTTPException(status_code=404, detail="Icon not found") + + return get_static_file(icon_path, content_type="image/png") diff --git a/agentic_security/static/base.js b/agentic_security/static/base.js index c3a513d..911ebca 100644 --- a/agentic_security/static/base.js +++ b/agentic_security/static/base.js @@ -175,25 +175,23 @@ Content-Type: application/json ] +let fallbackIcon = '/icons/myshell.png'; let LLM_CONFIGS = [ - { name: 'Custom API', prompts: 40000, customInstructions: 'Requires api spec' }, - { name: 'Open AI', prompts: 24000 }, - { name: 'Deepseek v1', prompts: 24000 }, - { name: 'Replicate', prompts: 40000 }, - { name: 'Groq', prompts: 40000 }, - { name: 'Together.ai', prompts: 40000 }, - { name: 'Custom API Image', prompts: 40000, customInstructions: 'Requires api spec', modality: 'Image' }, - { name: 'Custom API Files', prompts: 40000, customInstructions: 'Requires api spec', modality: 'Files' }, - { name: 'Gemini', prompts: 40000 }, - { name: 'Claude', prompts: 40000 }, - { name: 'Cohere', prompts: 40000 }, - { name: 'Azure OpenAI', prompts: 40000 }, - { name: 'assemblyai', prompts: 40000 }, - - -] - + { name: 'Custom API', prompts: 40000, customInstructions: 'Requires api spec', logo: fallbackIcon }, + { name: 'Open AI', prompts: 24000, logo: '/icons/openai.png' }, + { name: 'Deepseek v1', prompts: 24000, logo: '/icons/deepseek.png' }, + { name: 'Replicate', prompts: 40000, logo: '/icons/replicate.png' }, + { name: 'Groq', prompts: 40000, logo: '/icons/groq.png' }, + { name: 'Together.ai', prompts: 40000, logo: '/icons/together.png' }, + { name: 'Custom API Image', prompts: 40000, customInstructions: 'Requires api spec', modality: 'Image', logo: fallbackIcon }, + { name: 'Custom API Files', prompts: 40000, customInstructions: 'Requires api spec', modality: 'Files', logo: fallbackIcon }, + { name: 'Gemini', prompts: 40000, logo: '/icons/gemini.png' }, + { name: 'Claude', prompts: 40000, logo: '/icons/claude.png' }, + { name: 'Cohere', prompts: 40000, logo: '/icons/cohere.png' }, + { name: 'Azure OpenAI', prompts: 40000, logo: '/icons/azureai.png' }, + { name: 'assemblyai', prompts: 40000, logo: fallbackIcon }, +]; function has_image(spec) { return spec.includes('<>'); } diff --git a/agentic_security/static/icons/azureai.png b/agentic_security/static/icons/azureai.png new file mode 100644 index 0000000..6a58ea8 Binary files /dev/null and b/agentic_security/static/icons/azureai.png differ diff --git a/agentic_security/static/icons/claude.png b/agentic_security/static/icons/claude.png new file mode 100644 index 0000000..7404472 Binary files /dev/null and b/agentic_security/static/icons/claude.png differ diff --git a/agentic_security/static/icons/cohere.png b/agentic_security/static/icons/cohere.png new file mode 100644 index 0000000..e91d7af Binary files /dev/null and b/agentic_security/static/icons/cohere.png differ diff --git a/agentic_security/static/icons/deepseek.png b/agentic_security/static/icons/deepseek.png new file mode 100644 index 0000000..d7cf57d Binary files /dev/null and b/agentic_security/static/icons/deepseek.png differ diff --git a/agentic_security/static/icons/gemini.png b/agentic_security/static/icons/gemini.png new file mode 100644 index 0000000..ade3b58 Binary files /dev/null and b/agentic_security/static/icons/gemini.png differ diff --git a/agentic_security/static/icons/groq.png b/agentic_security/static/icons/groq.png new file mode 100644 index 0000000..638e8bd Binary files /dev/null and b/agentic_security/static/icons/groq.png differ diff --git a/agentic_security/static/icons/myshell.png b/agentic_security/static/icons/myshell.png new file mode 100644 index 0000000..eb5dca6 Binary files /dev/null and b/agentic_security/static/icons/myshell.png differ diff --git a/agentic_security/static/icons/openai.png b/agentic_security/static/icons/openai.png new file mode 100644 index 0000000..2948f66 Binary files /dev/null and b/agentic_security/static/icons/openai.png differ diff --git a/agentic_security/static/icons/replicate.png b/agentic_security/static/icons/replicate.png new file mode 100644 index 0000000..3243338 Binary files /dev/null and b/agentic_security/static/icons/replicate.png differ diff --git a/agentic_security/static/icons/together.png b/agentic_security/static/icons/together.png new file mode 100644 index 0000000..33d76ef Binary files /dev/null and b/agentic_security/static/icons/together.png differ