Add AI chat functionality with fallback for unconfigured services
Update AIChat component to handle AI service configuration errors and register new API routes for AI chat and title generation. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 9203795e-937a-4306-b81d-b4d5c78c240e Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 33138a67-a89c-47ac-a551-6b983481ce56 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7c94b7a0-29c7-4f2e-94ef-44b2153872b7/9203795e-937a-4306-b81d-b4d5c78c240e/BDxFKG1 Replit-Helium-Checkpoint-Created: true
This commit is contained in:
parent
834c4bd56e
commit
4fcda7c56a
2 changed files with 22 additions and 6 deletions
|
|
@ -101,12 +101,22 @@ export const AIChat: React.FC<AIChatProps> = ({
|
||||||
try {
|
try {
|
||||||
const history = messages.filter(m => m.role !== 'model' || messages.indexOf(m) > 0);
|
const history = messages.filter(m => m.role !== 'model' || messages.indexOf(m) > 0);
|
||||||
|
|
||||||
const response = await runChat(
|
let response: string;
|
||||||
content,
|
try {
|
||||||
history,
|
response = await runChat(
|
||||||
currentPersona.systemInstruction,
|
content,
|
||||||
currentPersona.tools
|
history,
|
||||||
);
|
currentPersona.systemInstruction,
|
||||||
|
currentPersona.tools
|
||||||
|
);
|
||||||
|
} catch (err) {
|
||||||
|
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
||||||
|
if (errorMessage.includes('AI service not configured') || errorMessage.includes('not configured')) {
|
||||||
|
response = "The AI service is currently being set up. Please check back soon, or contact the administrator to configure the Gemini API key.";
|
||||||
|
} else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const modelMessage: ChatMessageType = {
|
const modelMessage: ChatMessageType = {
|
||||||
role: 'model',
|
role: 'model',
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@ import { emailService } from "./email";
|
||||||
import { randomUUID, createHash, createVerify, randomBytes } from "crypto";
|
import { randomUUID, createHash, createVerify, randomBytes } from "crypto";
|
||||||
import blogIndexHandler from "../api/blog/index";
|
import blogIndexHandler from "../api/blog/index";
|
||||||
import blogSlugHandler from "../api/blog/[slug]";
|
import blogSlugHandler from "../api/blog/[slug]";
|
||||||
|
import aiChatHandler from "../api/ai/chat";
|
||||||
|
import aiTitleHandler from "../api/ai/title";
|
||||||
|
|
||||||
// Discord Interactions Handler
|
// Discord Interactions Handler
|
||||||
const handleDiscordInteractions = async (
|
const handleDiscordInteractions = async (
|
||||||
|
|
@ -7104,5 +7106,9 @@ export function createServer() {
|
||||||
return blogSlugHandler(req, res);
|
return blogSlugHandler(req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// AI Chat API routes
|
||||||
|
app.post("/api/ai/chat", aiChatHandler);
|
||||||
|
app.post("/api/ai/title", aiTitleHandler);
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue