feat(add llm icons):

This commit is contained in:
Alexander Myasoedov
2025-02-17 17:38:20 +02:00
parent 214341dfbb
commit f20d218a16
12 changed files with 35 additions and 18 deletions
+20 -1
View File
@@ -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")
+15 -17
View File
@@ -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('<<BASE64_IMAGE>>');
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB