ppt-tool/frontend/utils/providerConstants.ts
Vadym Samoilenko cf21ba4516 Phase 1-2: Foundation + Admin Panel & Client Management
Phase 1 (Foundation):
- Project restructure (presenton-main → backend/ + frontend/)
- Database schema (8 new models, Alembic config, seed script)
- Auth (Azure AD SSO + dev bypass, JWT sessions, AuthMiddleware)
- RBAC (access_service, rbac_middleware, admin routers)
- Audit logging (fire-and-forget, AuditMiddleware, admin router)
- i18n (react-i18next with 5 namespace files)

Phase 2 (Admin Panel & Client Management):
- Admin panel shell (sidebar layout, role guard, 12 pages)
- Redux admin slice with 18 async thunks
- User management (role changes, deactivation)
- Client management (CRUD, brand config, team management)
- Brand config editor (colors, fonts, logos, voice rules)
- Master deck upload & parser (PPTX → HTML → React pipeline)
- Audit log viewer with filters and CSV/JSON export

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 15:37:17 +00:00

119 lines
2.9 KiB
TypeScript

export interface ModelOption {
value: string;
label: string;
description?: string;
icon?: string;
size: string;
}
export interface ImageProviderOption {
value: string;
label: string;
description?: string;
icon?: string;
requiresApiKey?: boolean;
apiKeyField?: string;
apiKeyFieldLabel?: string;
}
export interface LLMProviderOption {
value: string;
label: string;
description?: string;
model_value?: string;
model_label?: string;
}
export const IMAGE_PROVIDERS: Record<string, ImageProviderOption> = {
pexels: {
value: "pexels",
label: "Pexels",
description: "Free stock photo and video platform",
icon: "/icons/pexels.png",
requiresApiKey: true,
apiKeyField: "PEXELS_API_KEY",
apiKeyFieldLabel: "Pexels API Key",
},
pixabay: {
value: "pixabay",
label: "Pixabay",
description: "Free images and videos",
icon: "/icons/pixabay.png",
requiresApiKey: true,
apiKeyField: "PIXABAY_API_KEY",
apiKeyFieldLabel: "Pixabay API Key",
},
"dall-e-3": {
value: "dall-e-3",
label: "DALL-E 3",
description: "OpenAI's image generation model",
icon: "/icons/dall-e.png",
requiresApiKey: true,
apiKeyField: "OPENAI_API_KEY",
apiKeyFieldLabel: "OpenAI API Key",
},
"gpt-image-1.5": {
value: "gpt-image-1.5",
label: "GPT Image 1.5",
description: "OpenAI's image generation model",
icon: "/icons/gpt.png",
requiresApiKey: true,
apiKeyField: "OPENAI_API_KEY",
apiKeyFieldLabel: "OpenAI API Key",
},
gemini_flash: {
value: "gemini_flash",
label: "Gemini Flash",
description: "Google's fast image generation model",
icon: "/icons/google.png",
requiresApiKey: true,
apiKeyField: "GOOGLE_API_KEY",
apiKeyFieldLabel: "Google API Key",
},
nanobanana_pro: {
value: "nanobanana_pro",
label: "NanoBanana Pro",
description: "Google's advanced image generation model",
icon: "/icons/google.png",
requiresApiKey: true,
apiKeyField: "GOOGLE_API_KEY",
apiKeyFieldLabel: "Google API Key",
},
comfyui: {
value: "comfyui",
label: "ComfyUI",
description: "Use your local ComfyUI server with custom workflows",
icon: "/icons/comfyui.png",
requiresApiKey: false,
apiKeyField: "COMFYUI_URL",
apiKeyFieldLabel: "ComfyUI Server URL",
},
};
export const LLM_PROVIDERS: Record<string, LLMProviderOption> = {
openai: {
value: "openai",
label: "OpenAI",
description: "OpenAI's latest text generation model",
},
google: {
value: "google",
label: "Google",
description: "Google's primary text generation model",
},
anthropic: {
value: "anthropic",
label: "Anthropic",
description: "Anthropic's Claude models",
},
ollama: {
value: "ollama",
label: "Ollama",
description: "Ollama's primary text generation model",
},
custom: {
value: "custom",
label: "Custom",
description: "Custom LLM",
},
};