mirror of
https://github.com/aljazceru/enclava.git
synced 2025-12-17 15:34:36 +01:00
renaming
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
Confidential Empire - Modular AI Gateway Platform
|
Enclava - Modular AI Platform
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "1.0.0"
|
__version__ = "1.0.0"
|
||||||
__author__ = "Confidential Empire Team"
|
__author__ = "Enclava Team"
|
||||||
__description__ = "Modular AI Gateway Platform with confidential AI processing"
|
__description__ = "Enclava - Modular AI Platform with confidential processing"
|
||||||
@@ -12,7 +12,7 @@ class Settings(BaseSettings):
|
|||||||
"""Application settings"""
|
"""Application settings"""
|
||||||
|
|
||||||
# Application
|
# Application
|
||||||
APP_NAME: str = "Shifra"
|
APP_NAME: str = "Enclava"
|
||||||
APP_DEBUG: bool = False
|
APP_DEBUG: bool = False
|
||||||
APP_LOG_LEVEL: str = "INFO"
|
APP_LOG_LEVEL: str = "INFO"
|
||||||
APP_HOST: str = "0.0.0.0"
|
APP_HOST: str = "0.0.0.0"
|
||||||
@@ -33,7 +33,7 @@ class Settings(BaseSettings):
|
|||||||
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
|
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
|
||||||
REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7 # 7 days
|
REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7 # 7 days
|
||||||
SESSION_EXPIRE_MINUTES: int = 60 * 24 # 24 hours
|
SESSION_EXPIRE_MINUTES: int = 60 * 24 # 24 hours
|
||||||
API_KEY_PREFIX: str = "ce_"
|
API_KEY_PREFIX: str = "en_"
|
||||||
|
|
||||||
# Admin user provisioning
|
# Admin user provisioning
|
||||||
ADMIN_USER: str = "admin"
|
ADMIN_USER: str = "admin"
|
||||||
@@ -45,7 +45,7 @@ class Settings(BaseSettings):
|
|||||||
|
|
||||||
# LiteLLM
|
# LiteLLM
|
||||||
LITELLM_BASE_URL: str = "http://localhost:4000"
|
LITELLM_BASE_URL: str = "http://localhost:4000"
|
||||||
LITELLM_MASTER_KEY: str = "empire-master-key"
|
LITELLM_MASTER_KEY: str = "enclava-master-key"
|
||||||
|
|
||||||
# API Keys for LLM providers
|
# API Keys for LLM providers
|
||||||
OPENAI_API_KEY: Optional[str] = None
|
OPENAI_API_KEY: Optional[str] = None
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ engine = create_async_engine(
|
|||||||
connect_args={
|
connect_args={
|
||||||
"command_timeout": 5,
|
"command_timeout": 5,
|
||||||
"server_settings": {
|
"server_settings": {
|
||||||
"application_name": "shifra_backend",
|
"application_name": "enclava_backend",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -49,7 +49,7 @@ sync_engine = create_engine(
|
|||||||
pool_recycle=3600, # Recycle connections every hour
|
pool_recycle=3600, # Recycle connections every hour
|
||||||
pool_timeout=30, # Max time to get connection from pool
|
pool_timeout=30, # Max time to get connection from pool
|
||||||
connect_args={
|
connect_args={
|
||||||
"application_name": "shifra_backend_sync",
|
"application_name": "enclava_backend_sync",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ async def lifespan(app: FastAPI):
|
|||||||
"""
|
"""
|
||||||
Application lifespan handler
|
Application lifespan handler
|
||||||
"""
|
"""
|
||||||
logger.info("Starting Confidential Empire platform...")
|
logger.info("Starting Enclava platform...")
|
||||||
|
|
||||||
# Initialize database
|
# Initialize database
|
||||||
await init_db()
|
await init_db()
|
||||||
@@ -85,7 +85,7 @@ async def lifespan(app: FastAPI):
|
|||||||
# Create FastAPI application
|
# Create FastAPI application
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title=settings.APP_NAME,
|
title=settings.APP_NAME,
|
||||||
description="Modular AI Gateway Platform with confidential AI processing",
|
description="Enclava - Modular AI Platform with confidential processing",
|
||||||
version="1.0.0",
|
version="1.0.0",
|
||||||
openapi_url="/api/v1/openapi.json",
|
openapi_url="/api/v1/openapi.json",
|
||||||
docs_url="/api/v1/docs",
|
docs_url="/api/v1/docs",
|
||||||
@@ -201,7 +201,7 @@ async def health_check():
|
|||||||
async def root():
|
async def root():
|
||||||
"""Root endpoint"""
|
"""Root endpoint"""
|
||||||
return {
|
return {
|
||||||
"message": "Confidential Empire - Modular AI Gateway Platform",
|
"message": "Enclava - Modular AI Platform",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"docs": "/api/v1/docs",
|
"docs": "/api/v1/docs",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ This module provides AI chatbot capabilities with:
|
|||||||
from .main import ChatbotModule, create_module
|
from .main import ChatbotModule, create_module
|
||||||
|
|
||||||
__version__ = "1.0.0"
|
__version__ = "1.0.0"
|
||||||
__author__ = "AI Gateway Team"
|
__author__ = "Enclava Team"
|
||||||
|
|
||||||
# Export main classes for easy importing
|
# Export main classes for easy importing
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|||||||
@@ -803,7 +803,7 @@ class ChatbotModule(BaseModule):
|
|||||||
try:
|
try:
|
||||||
# Try to verify the collection exists in Qdrant
|
# Try to verify the collection exists in Qdrant
|
||||||
from qdrant_client import QdrantClient
|
from qdrant_client import QdrantClient
|
||||||
qdrant_client = QdrantClient(host="shifra-qdrant", port=6333)
|
qdrant_client = QdrantClient(host="enclava-qdrant", port=6333)
|
||||||
collections = qdrant_client.get_collections()
|
collections = qdrant_client.get_collections()
|
||||||
collection_names = [c.name for c in collections.collections]
|
collection_names = [c.name for c in collections.collections]
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
name: chatbot
|
name: chatbot
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
description: "AI Chatbot with RAG integration and customizable prompts"
|
description: "AI Chatbot with RAG integration and customizable prompts"
|
||||||
author: "AI Gateway Team"
|
author: "Enclava Team"
|
||||||
category: "conversation"
|
category: "conversation"
|
||||||
|
|
||||||
# Module lifecycle
|
# Module lifecycle
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ from typing import Dict, List, Tuple
|
|||||||
# Test configuration
|
# Test configuration
|
||||||
PLATFORM_URL = "http://localhost:58000/api/v1/llm/chat/completions"
|
PLATFORM_URL = "http://localhost:58000/api/v1/llm/chat/completions"
|
||||||
LITELLM_URL = "http://localhost:54000/chat/completions"
|
LITELLM_URL = "http://localhost:54000/chat/completions"
|
||||||
API_KEY = "ce_mMJNyEznKHJRvvNyyuwuQotuWJ2BvdD8"
|
API_KEY = "en_mMJNyEznKHJRvvNyyuwuQotuWJ2BvdD8"
|
||||||
LITELLM_KEY = "shifra-master-key" # From docker-compose.yml
|
LITELLM_KEY = "enclava-master-key" # From docker-compose.yml
|
||||||
|
|
||||||
TEST_PROMPT = "What is the capital of France? Give a brief answer."
|
TEST_PROMPT = "What is the capital of France? Give a brief answer."
|
||||||
MODEL = "ollama-deepseek-r1"
|
MODEL = "ollama-deepseek-r1"
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import requests
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
API_KEY = "ce_mMJNyEznKHJRvvNyyuwuQotuWJ2BvdD8"
|
API_KEY = "en_mMJNyEznKHJRvvNyyuwuQotuWJ2BvdD8"
|
||||||
LITELLM_KEY = "shifra-master-key"
|
LITELLM_KEY = "enclava-master-key"
|
||||||
TEST_PROMPT = "What is 2+2? Answer briefly."
|
TEST_PROMPT = "What is 2+2? Answer briefly."
|
||||||
MODEL = "ollama-deepseek-r1"
|
MODEL = "ollama-deepseek-r1"
|
||||||
|
|
||||||
|
|||||||
@@ -1,26 +1,26 @@
|
|||||||
name: shifra
|
name: enclava
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Main application backend
|
# Main application backend
|
||||||
shifra-backend:
|
enclava-backend:
|
||||||
build:
|
build:
|
||||||
context: ./backend
|
context: ./backend
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
environment:
|
environment:
|
||||||
- DATABASE_URL=postgresql://shifra_user:shifra_pass@shifra-postgres:5432/shifra_db
|
- DATABASE_URL=postgresql://enclava_user:enclava_pass@enclava-postgres:5432/enclava_db
|
||||||
- REDIS_URL=redis://shifra-redis:6379
|
- REDIS_URL=redis://enclava-redis:6379
|
||||||
- QDRANT_HOST=shifra-qdrant
|
- QDRANT_HOST=enclava-qdrant
|
||||||
- LITELLM_BASE_URL=http://litellm-proxy:4000
|
- LITELLM_BASE_URL=http://litellm-proxy:4000
|
||||||
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY:-shifra-master-key}
|
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY:-enclava-master-key}
|
||||||
- JWT_SECRET=${JWT_SECRET:-your-jwt-secret-here}
|
- JWT_SECRET=${JWT_SECRET:-your-jwt-secret-here}
|
||||||
- PRIVATEMODE_API_KEY=${PRIVATEMODE_API_KEY:-}
|
- PRIVATEMODE_API_KEY=${PRIVATEMODE_API_KEY:-}
|
||||||
- ADMIN_USER=${ADMIN_USER:-admin}
|
- ADMIN_USER=${ADMIN_USER:-admin}
|
||||||
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin123}
|
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin123}
|
||||||
- LOG_LLM_PROMPTS=${LOG_LLM_PROMPTS:-false}
|
- LOG_LLM_PROMPTS=${LOG_LLM_PROMPTS:-false}
|
||||||
depends_on:
|
depends_on:
|
||||||
- shifra-postgres
|
- enclava-postgres
|
||||||
- shifra-redis
|
- enclava-redis
|
||||||
- shifra-qdrant
|
- enclava-qdrant
|
||||||
- litellm-proxy
|
- litellm-proxy
|
||||||
ports:
|
ports:
|
||||||
- "58000:8000"
|
- "58000:8000"
|
||||||
@@ -28,51 +28,51 @@ services:
|
|||||||
- ./backend:/app
|
- ./backend:/app
|
||||||
- ./logs:/app/logs
|
- ./logs:/app/logs
|
||||||
networks:
|
networks:
|
||||||
- conf-ai-net
|
- enclava-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# Next.js frontend
|
# Next.js frontend
|
||||||
shifra-frontend:
|
enclava-frontend:
|
||||||
image: node:18-alpine
|
image: node:18-alpine
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
command: sh -c "npm install && npm run dev"
|
command: sh -c "npm install && npm run dev"
|
||||||
environment:
|
environment:
|
||||||
- NEXT_PUBLIC_API_URL=http://localhost:58000
|
- NEXT_PUBLIC_API_URL=http://localhost:58000
|
||||||
- NEXT_PUBLIC_WS_URL=ws://localhost:58000
|
- NEXT_PUBLIC_WS_URL=ws://localhost:58000
|
||||||
- INTERNAL_API_URL=http://shifra-backend:8000
|
- INTERNAL_API_URL=http://enclava-backend:8000
|
||||||
depends_on:
|
depends_on:
|
||||||
- shifra-backend
|
- enclava-backend
|
||||||
ports:
|
ports:
|
||||||
- "53000:3000"
|
- "53000:3000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./frontend:/app
|
- ./frontend:/app
|
||||||
- /app/node_modules
|
- /app/node_modules
|
||||||
networks:
|
networks:
|
||||||
- conf-ai-net
|
- enclava-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# PostgreSQL database
|
# PostgreSQL database
|
||||||
shifra-postgres:
|
enclava-postgres:
|
||||||
image: postgres:16
|
image: postgres:16
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_DB=shifra_db
|
- POSTGRES_DB=enclava_db
|
||||||
- POSTGRES_USER=shifra_user
|
- POSTGRES_USER=enclava_user
|
||||||
- POSTGRES_PASSWORD=shifra_pass
|
- POSTGRES_PASSWORD=enclava_pass
|
||||||
volumes:
|
volumes:
|
||||||
- shifra-postgres-data:/var/lib/postgresql/data
|
- enclava-postgres-data:/var/lib/postgresql/data
|
||||||
- ./backend/migrations:/docker-entrypoint-initdb.d
|
- ./backend/migrations:/docker-entrypoint-initdb.d
|
||||||
networks:
|
networks:
|
||||||
- conf-ai-net
|
- enclava-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# Redis for caching and message queue
|
# Redis for caching and message queue
|
||||||
shifra-redis:
|
enclava-redis:
|
||||||
image: redis:7-alpine
|
image: redis:7-alpine
|
||||||
command: redis-server --appendonly yes
|
command: redis-server --appendonly yes
|
||||||
volumes:
|
volumes:
|
||||||
- shifra-redis-data:/data
|
- enclava-redis-data:/data
|
||||||
networks:
|
networks:
|
||||||
- conf-ai-net
|
- enclava-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# LiteLLM proxy for unified LLM API
|
# LiteLLM proxy for unified LLM API
|
||||||
@@ -81,9 +81,9 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- UI_USERNAME=admin
|
- UI_USERNAME=admin
|
||||||
- UI_PASSWORD=${LITELLM_UI_PASSWORD:-admin123}
|
- UI_PASSWORD=${LITELLM_UI_PASSWORD:-admin123}
|
||||||
- DATABASE_URL=postgresql://shifra_user:shifra_pass@shifra-postgres:5432/shifra_db
|
- DATABASE_URL=postgresql://enclava_user:enclava_pass@enclava-postgres:5432/enclava_db
|
||||||
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
|
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
|
||||||
#- OLLAMA_BASE_URL=http://shifra-ollama-proxy:11434/v1
|
#- OLLAMA_BASE_URL=http://enclava-ollama-proxy:11434/v1
|
||||||
#- OLLAMA_API_KEY=ollama
|
#- OLLAMA_API_KEY=ollama
|
||||||
- PRIVATEMODE_API_KEY=${PRIVATEMODE_API_KEY:-}
|
- PRIVATEMODE_API_KEY=${PRIVATEMODE_API_KEY:-}
|
||||||
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY}
|
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY}
|
||||||
@@ -92,15 +92,15 @@ services:
|
|||||||
- ./litellm_config.yaml:/app/config.yaml
|
- ./litellm_config.yaml:/app/config.yaml
|
||||||
command: --config /app/config.yaml --port 4000 --num_workers 1
|
command: --config /app/config.yaml --port 4000 --num_workers 1
|
||||||
depends_on:
|
depends_on:
|
||||||
- shifra-postgres
|
- enclava-postgres
|
||||||
ports:
|
ports:
|
||||||
- "54000:4000"
|
- "54000:4000"
|
||||||
networks:
|
networks:
|
||||||
- conf-ai-net
|
- enclava-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# Ollama Free Model Proxy
|
# Ollama Free Model Proxy
|
||||||
#shifra-ollama-proxy:
|
#enclava-ollama-proxy:
|
||||||
# build:
|
# build:
|
||||||
# context: /home/lio/cloud/code/ollama-free-model-proxy
|
# context: /home/lio/cloud/code/ollama-free-model-proxy
|
||||||
# dockerfile: Dockerfile
|
# dockerfile: Dockerfile
|
||||||
@@ -109,10 +109,10 @@ services:
|
|||||||
# - FREE_MODE=true
|
# - FREE_MODE=true
|
||||||
# - TOOL_USE_ONLY=false
|
# - TOOL_USE_ONLY=false
|
||||||
# volumes:
|
# volumes:
|
||||||
# - shifra-ollama-data:/data
|
# - enclava-ollama-data:/data
|
||||||
# working_dir: /data
|
# working_dir: /data
|
||||||
# networks:
|
# networks:
|
||||||
# - conf-ai-net
|
# - enclava-net
|
||||||
# restart: unless-stopped
|
# restart: unless-stopped
|
||||||
#healthcheck:
|
#healthcheck:
|
||||||
# test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:11434/"]
|
# test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:11434/"]
|
||||||
@@ -122,7 +122,7 @@ services:
|
|||||||
# start_period: 40s
|
# start_period: 40s
|
||||||
|
|
||||||
# Qdrant vector database
|
# Qdrant vector database
|
||||||
shifra-qdrant:
|
enclava-qdrant:
|
||||||
image: qdrant/qdrant:latest
|
image: qdrant/qdrant:latest
|
||||||
environment:
|
environment:
|
||||||
- QDRANT__SERVICE__HTTP_PORT=6333
|
- QDRANT__SERVICE__HTTP_PORT=6333
|
||||||
@@ -131,9 +131,9 @@ services:
|
|||||||
- "56333:6333" # HTTP API and Web Interface
|
- "56333:6333" # HTTP API and Web Interface
|
||||||
- "56334:6334" # GRPC API (optional)
|
- "56334:6334" # GRPC API (optional)
|
||||||
volumes:
|
volumes:
|
||||||
- shifra-qdrant-data:/qdrant/storage
|
- enclava-qdrant-data:/qdrant/storage
|
||||||
networks:
|
networks:
|
||||||
- conf-ai-net
|
- enclava-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# Privatemode.ai service (optional - for confidential models)
|
# Privatemode.ai service (optional - for confidential models)
|
||||||
@@ -151,15 +151,15 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "58080:8080"
|
- "58080:8080"
|
||||||
networks:
|
networks:
|
||||||
- conf-ai-net
|
- enclava-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
shifra-postgres-data:
|
enclava-postgres-data:
|
||||||
shifra-redis-data:
|
enclava-redis-data:
|
||||||
shifra-qdrant-data:
|
enclava-qdrant-data:
|
||||||
# shifra-ollama-data:
|
# enclava-ollama-data:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
conf-ai-net:
|
enclava-net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const nextConfig = {
|
|||||||
},
|
},
|
||||||
env: {
|
env: {
|
||||||
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000',
|
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000',
|
||||||
NEXT_PUBLIC_APP_NAME: process.env.NEXT_PUBLIC_APP_NAME || 'AI Gateway',
|
NEXT_PUBLIC_APP_NAME: process.env.NEXT_PUBLIC_APP_NAME || 'Enclava',
|
||||||
},
|
},
|
||||||
async headers() {
|
async headers() {
|
||||||
return [
|
return [
|
||||||
|
|||||||
4
frontend/package-lock.json
generated
4
frontend/package-lock.json
generated
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "ai-gateway-frontend",
|
"name": "enclava-frontend",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ai-gateway-frontend",
|
"name": "enclava-frontend",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hookform/resolvers": "^3.3.2",
|
"@hookform/resolvers": "^3.3.2",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "ai-gateway-frontend",
|
"name": "enclava-frontend",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(
|
export async function POST(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
const REQUEST_TIMEOUT = 30000 // 30 seconds
|
const REQUEST_TIMEOUT = 30000 // 30 seconds
|
||||||
|
|
||||||
interface ChatRequestBody {
|
interface ChatRequestBody {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function DELETE(
|
export async function DELETE(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function PUT(
|
export async function PUT(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(
|
export async function POST(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function DELETE(
|
export async function DELETE(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from "next/server"
|
import { NextRequest, NextResponse } from "next/server"
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || "http://shifra-backend:8000"
|
const BACKEND_URL = process.env.INTERNAL_API_URL || "http://enclava-backend:8000"
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(
|
export async function POST(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function PUT(
|
export async function PUT(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.BACKEND_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function DELETE(
|
export async function DELETE(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.BACKEND_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.BACKEND_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(
|
export async function GET(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.BACKEND_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function DELETE(
|
export async function DELETE(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.BACKEND_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.BACKEND_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(
|
export async function GET(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(
|
export async function POST(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(
|
export async function GET(
|
||||||
request: NextRequest,
|
request: NextRequest,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server'
|
import { NextRequest, NextResponse } from 'next/server'
|
||||||
|
|
||||||
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://shifra-backend:8000'
|
const BACKEND_URL = process.env.INTERNAL_API_URL || 'http://enclava-backend:8000'
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ function DashboardContent() {
|
|||||||
Welcome back, {user.name}
|
Welcome back, {user.name}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-empire-gold/60 mt-1">
|
<p className="text-empire-gold/60 mt-1">
|
||||||
Manage your AI gateway and modules
|
Manage your Enclava platform and modules
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<Button className="bg-empire-gold hover:bg-empire-gold/90 text-empire-dark">
|
<Button className="bg-empire-gold hover:bg-empire-gold/90 text-empire-dark">
|
||||||
|
|||||||
@@ -17,22 +17,22 @@ export const viewport: Viewport = {
|
|||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
metadataBase: new URL('http://localhost:3000'),
|
metadataBase: new URL('http://localhost:3000'),
|
||||||
title: 'AI Gateway Platform',
|
title: 'Enclava Platform',
|
||||||
description: 'Secure AI processing platform with plugin-based architecture and confidential computing',
|
description: 'Secure AI processing platform with plugin-based architecture and confidential computing',
|
||||||
keywords: ['AI', 'Gateway', 'Confidential Computing', 'LLM', 'TEE'],
|
keywords: ['AI', 'Enclava', 'Confidential Computing', 'LLM', 'TEE'],
|
||||||
authors: [{ name: 'AI Gateway Team' }],
|
authors: [{ name: 'Enclava Team' }],
|
||||||
robots: 'index, follow',
|
robots: 'index, follow',
|
||||||
openGraph: {
|
openGraph: {
|
||||||
type: 'website',
|
type: 'website',
|
||||||
locale: 'en_US',
|
locale: 'en_US',
|
||||||
url: 'http://localhost:3000',
|
url: 'http://localhost:3000',
|
||||||
title: 'AI Gateway Platform',
|
title: 'Enclava Platform',
|
||||||
description: 'Secure AI processing platform with plugin-based architecture and confidential computing',
|
description: 'Secure AI processing platform with plugin-based architecture and confidential computing',
|
||||||
siteName: 'AI Gateway',
|
siteName: 'Enclava',
|
||||||
},
|
},
|
||||||
twitter: {
|
twitter: {
|
||||||
card: 'summary_large_image',
|
card: 'summary_large_image',
|
||||||
title: 'AI Gateway Platform',
|
title: 'Enclava Platform',
|
||||||
description: 'Secure AI processing platform with plugin-based architecture and confidential computing',
|
description: 'Secure AI processing platform with plugin-based architecture and confidential computing',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -675,7 +675,7 @@ function LLMPageContent() {
|
|||||||
<CardHeader>
|
<CardHeader>
|
||||||
<CardTitle>Available Models</CardTitle>
|
<CardTitle>Available Models</CardTitle>
|
||||||
<CardDescription>
|
<CardDescription>
|
||||||
Models available through your LLM gateway.
|
Models available through your LLM platform.
|
||||||
</CardDescription>
|
</CardDescription>
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
@@ -691,7 +691,7 @@ function LLMPageContent() {
|
|||||||
))}
|
))}
|
||||||
{models.length === 0 && (
|
{models.length === 0 && (
|
||||||
<div className="col-span-full text-center py-8 text-muted-foreground">
|
<div className="col-span-full text-center py-8 text-muted-foreground">
|
||||||
No models available. Check your LLM gateway configuration.
|
No models available. Check your LLM platform configuration.
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export default function LoginPage() {
|
|||||||
await login(email, password)
|
await login(email, password)
|
||||||
toast({
|
toast({
|
||||||
title: "Login successful",
|
title: "Login successful",
|
||||||
description: "Welcome to Confidential Empire",
|
description: "Welcome to Enclava",
|
||||||
})
|
})
|
||||||
router.push("/dashboard")
|
router.push("/dashboard")
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -54,10 +54,10 @@ export default function LoginPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<CardTitle className="text-2xl font-bold text-empire-gold">
|
<CardTitle className="text-2xl font-bold text-empire-gold">
|
||||||
Confidential Empire
|
Enclava
|
||||||
</CardTitle>
|
</CardTitle>
|
||||||
<CardDescription>
|
<CardDescription>
|
||||||
Sign in to your secure AI gateway
|
Sign in to your secure AI platform
|
||||||
</CardDescription>
|
</CardDescription>
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export default function HomePage() {
|
|||||||
<div className="w-8 h-8 bg-empire-gold rounded-lg flex items-center justify-center">
|
<div className="w-8 h-8 bg-empire-gold rounded-lg flex items-center justify-center">
|
||||||
<Shield className="w-5 h-5 text-empire-dark" />
|
<Shield className="w-5 h-5 text-empire-dark" />
|
||||||
</div>
|
</div>
|
||||||
<span className="text-xl font-bold text-empire-gold">AI Gateway</span>
|
<span className="text-xl font-bold text-empire-gold">Enclava</span>
|
||||||
</div>
|
</div>
|
||||||
<nav className="hidden md:flex items-center space-x-6">
|
<nav className="hidden md:flex items-center space-x-6">
|
||||||
<a href="#features" className="text-empire-gold/60 hover:text-empire-gold">
|
<a href="#features" className="text-empire-gold/60 hover:text-empire-gold">
|
||||||
@@ -78,9 +78,9 @@ export default function HomePage() {
|
|||||||
AI Processing Platform
|
AI Processing Platform
|
||||||
</Badge>
|
</Badge>
|
||||||
<h1 className="text-4xl md:text-6xl font-bold mb-6 text-empire-gold">
|
<h1 className="text-4xl md:text-6xl font-bold mb-6 text-empire-gold">
|
||||||
Secure AI Gateway with{' '}
|
Secure AI Platform with{' '}
|
||||||
<span className="bg-gradient-to-r from-empire-gold to-empire-gold/80 bg-clip-text text-transparent">
|
<span className="bg-gradient-to-r from-empire-gold to-empire-gold/80 bg-clip-text text-transparent">
|
||||||
Secure Computing
|
Confidential Computing
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-xl text-empire-gold/60 mb-8">
|
<p className="text-xl text-empire-gold/60 mb-8">
|
||||||
@@ -206,7 +206,7 @@ export default function HomePage() {
|
|||||||
<div className="text-center mb-16">
|
<div className="text-center mb-16">
|
||||||
<h2 className="text-3xl font-bold mb-4 text-empire-gold">Available Modules</h2>
|
<h2 className="text-3xl font-bold mb-4 text-empire-gold">Available Modules</h2>
|
||||||
<p className="text-empire-gold/60 max-w-2xl mx-auto">
|
<p className="text-empire-gold/60 max-w-2xl mx-auto">
|
||||||
Extend your AI gateway with powerful modules for enhanced functionality
|
Extend your Enclava platform with powerful modules for enhanced functionality
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
@@ -278,7 +278,7 @@ export default function HomePage() {
|
|||||||
<div className="w-6 h-6 bg-empire-gold rounded flex items-center justify-center">
|
<div className="w-6 h-6 bg-empire-gold rounded flex items-center justify-center">
|
||||||
<Shield className="w-4 h-4 text-empire-dark" />
|
<Shield className="w-4 h-4 text-empire-dark" />
|
||||||
</div>
|
</div>
|
||||||
<span className="font-semibold text-empire-gold">AI Gateway</span>
|
<span className="font-semibold text-empire-gold">Enclava</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center space-x-6 text-sm text-empire-gold/60">
|
<div className="flex items-center space-x-6 text-sm text-empire-gold/60">
|
||||||
<a href="/docs" className="hover:text-empire-gold">Documentation</a>
|
<a href="/docs" className="hover:text-empire-gold">Documentation</a>
|
||||||
@@ -288,7 +288,7 @@ export default function HomePage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-8 pt-8 border-t border-empire-gold/20 text-center text-sm text-empire-gold/60">
|
<div className="mt-8 pt-8 border-t border-empire-gold/20 text-center text-sm text-empire-gold/60">
|
||||||
<p>© 2024 AI Gateway. All rights reserved.</p>
|
<p>© 2024 Enclava. All rights reserved.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ const Navigation = () => {
|
|||||||
<Link href={user ? "/dashboard" : "/"} className="mr-6 flex items-center space-x-2">
|
<Link href={user ? "/dashboard" : "/"} className="mr-6 flex items-center space-x-2">
|
||||||
<div className="h-6 w-6 rounded bg-gradient-to-br from-empire-600 to-empire-800" />
|
<div className="h-6 w-6 rounded bg-gradient-to-br from-empire-600 to-empire-800" />
|
||||||
<span className="hidden font-bold sm:inline-block">
|
<span className="hidden font-bold sm:inline-block">
|
||||||
AI Gateway
|
Enclava
|
||||||
</span>
|
</span>
|
||||||
</Link>
|
</Link>
|
||||||
{user && (
|
{user && (
|
||||||
|
|||||||
Reference in New Issue
Block a user