Initial commit: EGBE chatbot template

Stripped from vercel/chatbot (Apache 2.0):
- Dropped @vercel/* packages and AI Gateway
- Removed artifacts feature (code/text/sheet/image side panel)
- Switched AI provider to @ai-sdk/openai-compatible -> EGBE LiteLLM
- Replaced Vercel Blob upload with data URLs
- Dropped Redis resumable streams and rate limiter (in-memory now)
- Added Dockerfile (Next.js standalone) + entrypoint that runs migrations
- Wired DATABASE_URL, EGBE_AI_API_URL/KEY, NEXT_PUBLIC_BASE_URL for app-deploy.sh
This commit is contained in:
dmitry.galkin 2026-05-25 14:54:04 +04:00
commit 3e21c2334c
129 changed files with 21913 additions and 0 deletions

27
lib/ratelimit.ts Normal file
View file

@ -0,0 +1,27 @@
import { isProductionEnvironment } from "@/lib/constants";
import { ChatbotError } from "@/lib/errors";
const MAX_MESSAGES = 30;
const TTL_MS = 60 * 60 * 1000;
const ipCounts = new Map<string, { count: number; resetAt: number }>();
export async function checkIpRateLimit(ip: string | undefined) {
if (!isProductionEnvironment || !ip) {
return;
}
const now = Date.now();
const entry = ipCounts.get(ip);
if (!entry || entry.resetAt < now) {
ipCounts.set(ip, { count: 1, resetAt: now + TTL_MS });
return;
}
entry.count += 1;
if (entry.count > MAX_MESSAGES) {
throw new ChatbotError("rate_limit:chat");
}
}