diff --git a/docker-compose.yml b/docker-compose.yml index ea029f8..a427d8b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,9 +25,10 @@ services: - SMTP_FROM=${SMTP_FROM:-noreply@memento.app} # AI Providers + # Only define these if you're using the corresponding provider - OPENAI_API_KEY=${OPENAI_API_KEY} - - OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://ollama:11434} - - OLLAMA_MODEL=${OLLAMA_MODEL:-granite4:latest} + - OLLAMA_BASE_URL=${OLLAMA_BASE_URL} + - OLLAMA_MODEL=${OLLAMA_MODEL} volumes: - db-data:/app/prisma - uploads-data:/app/public/uploads diff --git a/keep-notes/DOCKER_DEPLOYMENT.md b/keep-notes/DOCKER_DEPLOYMENT.md index ccd0493..a60713a 100644 --- a/keep-notes/DOCKER_DEPLOYMENT.md +++ b/keep-notes/DOCKER_DEPLOYMENT.md @@ -1,6 +1,6 @@ # 🐳 Docker Deployment Guide for Proxmox -Complete guide to deploy Mento on Proxmox using Docker Compose. +Complete guide to deploy Memento on Proxmox using Docker Compose. ## 📋 Prerequisites @@ -375,7 +375,7 @@ usermod -aG docker ubuntu # Add: features: nesting=1,keyctl=1 ``` -Then deploy Mento as described above. +Then deploy Memento as described above. ## 📚 Additional Resources diff --git a/keep-notes/README.md b/keep-notes/README.md index b3c5d12..e99674d 100644 --- a/keep-notes/README.md +++ b/keep-notes/README.md @@ -1,8 +1,8 @@ -# Mento - Google Keep Clone +# Memento - Google Keep Clone A beautiful and feature-rich Google Keep clone built with modern web technologies. -![Mento](https://img.shields.io/badge/Next.js-16-black) +![Memento](https://img.shields.io/badge/Next.js-16-black) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue) ![Tailwind CSS](https://img.shields.io/badge/Tailwind-4.0-38bdf8) ![Prisma](https://img.shields.io/badge/Prisma-7.0-2d3748) diff --git a/keep-notes/app/api/ai/config/route.ts b/keep-notes/app/api/ai/config/route.ts index ebdd8f2..c696298 100644 --- a/keep-notes/app/api/ai/config/route.ts +++ b/keep-notes/app/api/ai/config/route.ts @@ -6,14 +6,14 @@ export async function GET(request: NextRequest) { const config = await getSystemConfig() return NextResponse.json({ - AI_PROVIDER_TAGS: config.AI_PROVIDER_TAGS || 'ollama', - AI_MODEL_TAGS: config.AI_MODEL_TAGS || 'granite4:latest', - AI_PROVIDER_EMBEDDING: config.AI_PROVIDER_EMBEDDING || 'ollama', - AI_MODEL_EMBEDDING: config.AI_MODEL_EMBEDDING || 'embeddinggemma:latest', + AI_PROVIDER_TAGS: config.AI_PROVIDER_TAGS || 'not set', + AI_MODEL_TAGS: config.AI_MODEL_TAGS || 'not set', + AI_PROVIDER_EMBEDDING: config.AI_PROVIDER_EMBEDDING || 'not set', + AI_MODEL_EMBEDDING: config.AI_MODEL_EMBEDDING || 'not set', OPENAI_API_KEY: config.OPENAI_API_KEY ? '***configured***' : '', CUSTOM_OPENAI_API_KEY: config.CUSTOM_OPENAI_API_KEY ? '***configured***' : '', CUSTOM_OPENAI_BASE_URL: config.CUSTOM_OPENAI_BASE_URL || '', - OLLAMA_BASE_URL: config.OLLAMA_BASE_URL || 'http://localhost:11434' + OLLAMA_BASE_URL: config.OLLAMA_BASE_URL || 'not set' }) } catch (error: any) { return NextResponse.json( diff --git a/keep-notes/components/sidebar.tsx b/keep-notes/components/sidebar.tsx index 40212ec..0ce7d47 100644 --- a/keep-notes/components/sidebar.tsx +++ b/keep-notes/components/sidebar.tsx @@ -79,7 +79,7 @@ export function Sidebar({ className, user }: { className?: string, user?: any })
- Mento + Memento {t('nav.workspace')}
diff --git a/keep-notes/deploy.sh b/keep-notes/deploy.sh index 8bbd198..b9057dc 100644 --- a/keep-notes/deploy.sh +++ b/keep-notes/deploy.sh @@ -1,11 +1,11 @@ #!/bin/bash -# Mento Docker Deployment Script -# This script helps you build and deploy Mento on Proxmox/Docker +# Memento Docker Deployment Script +# This script helps you build and deploy Memento on Proxmox/Docker set -e -echo "🚀 Mento Docker Deployment" +echo "🚀 Memento Docker Deployment" echo "================================" echo "" diff --git a/keep-notes/lib/ai/factory.ts b/keep-notes/lib/ai/factory.ts index f0b65bc..3001a08 100644 --- a/keep-notes/lib/ai/factory.ts +++ b/keep-notes/lib/ai/factory.ts @@ -64,19 +64,41 @@ function getProviderInstance(providerType: ProviderType, config: Record): AIProvider { - const providerType = (config?.AI_PROVIDER_TAGS || process.env.AI_PROVIDER_TAGS || 'ollama').toLowerCase() as ProviderType; + // Check database config first, then environment variables + const providerType = (config?.AI_PROVIDER_TAGS || process.env.AI_PROVIDER_TAGS); + + // If no provider is configured, throw a clear error + if (!providerType) { + throw new Error( + 'AI_PROVIDER_TAGS is not configured. Please set it in the admin settings or environment variables. ' + + 'Options: ollama, openai, custom' + ); + } + + const provider = providerType.toLowerCase() as ProviderType; const modelName = config?.AI_MODEL_TAGS || process.env.AI_MODEL_TAGS || 'granite4:latest'; const embeddingModelName = config?.AI_MODEL_EMBEDDING || process.env.AI_MODEL_EMBEDDING || 'embeddinggemma:latest'; - return getProviderInstance(providerType, config || {}, modelName, embeddingModelName); + return getProviderInstance(provider, config || {}, modelName, embeddingModelName); } export function getEmbeddingsProvider(config?: Record): AIProvider { - const providerType = (config?.AI_PROVIDER_EMBEDDING || process.env.AI_PROVIDER_EMBEDDING || 'ollama').toLowerCase() as ProviderType; + // Check database config first, then environment variables + const providerType = (config?.AI_PROVIDER_EMBEDDING || process.env.AI_PROVIDER_EMBEDDING); + + // If no provider is configured, throw a clear error + if (!providerType) { + throw new Error( + 'AI_PROVIDER_EMBEDDING is not configured. Please set it in the admin settings or environment variables. ' + + 'Options: ollama, openai, custom' + ); + } + + const provider = providerType.toLowerCase() as ProviderType; const modelName = config?.AI_MODEL_TAGS || process.env.AI_MODEL_TAGS || 'granite4:latest'; const embeddingModelName = config?.AI_MODEL_EMBEDDING || process.env.AI_MODEL_EMBEDDING || 'embeddinggemma:latest'; - return getProviderInstance(providerType, config || {}, modelName, embeddingModelName); + return getProviderInstance(provider, config || {}, modelName, embeddingModelName); } // Legacy function for backward compatibility