feat: chatbot model setting + tool-calling toggle, simplify admin AI config (v0.59.0)
Chatbot (general assistant + per-recipe Q&A) now resolves its default model from its own site setting (DEFAULT_CHAT_PROVIDER/MODEL) instead of sharing the generic "text" use case with recipe generation, so admins can point it at a different model. Added AI_TOOL_CALLING_ENABLED: turns off the chatbot's createRecipe/ addToShoppingList tools (and the forced-retry pass) for models that don't reliably support tool calling — it falls back to plain text answers. Simplified the admin AI Configuration page: it showed provider keys and routing settings twice (a read-only card, then an identical edit form). Merged into one editable section; the resolved fallback provider is now a one-line note instead of its own card. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -778,12 +778,15 @@ export function generateOpenApiSpec(): object {
|
||||
NEXT_PUBLIC_VAPID_PUBLIC_KEY: z.string().nullable().optional(),
|
||||
VAPID_PRIVATE_KEY: z.string().nullable().optional().describe("secret — write-only, never returned"),
|
||||
SIGNUPS_DISABLED: z.string().nullable().optional(),
|
||||
DEFAULT_TEXT_PROVIDER: z.enum(["openai", "anthropic", "openrouter", "ollama"]).nullable().optional().describe("Site-wide default for recipe/chat text generation when a user has no personal model preference and no BYOK key."),
|
||||
DEFAULT_TEXT_PROVIDER: z.enum(["openai", "anthropic", "openrouter", "ollama"]).nullable().optional().describe("Site-wide default for recipe generation and other text use cases when a user has no personal model preference and no BYOK key."),
|
||||
DEFAULT_TEXT_MODEL: z.string().nullable().optional(),
|
||||
DEFAULT_CHAT_PROVIDER: z.enum(["openai", "anthropic", "openrouter", "ollama"]).nullable().optional().describe("Site-wide default for the chatbot (general cooking assistant + per-recipe Q&A)."),
|
||||
DEFAULT_CHAT_MODEL: z.string().nullable().optional(),
|
||||
DEFAULT_VISION_PROVIDER: z.enum(["openai", "anthropic", "openrouter", "ollama"]).nullable().optional().describe("Site-wide default for photo/vision use cases (pantry scan, photo import)."),
|
||||
DEFAULT_VISION_MODEL: z.string().nullable().optional(),
|
||||
DEFAULT_MEAL_PLAN_PROVIDER: z.enum(["openai", "anthropic", "openrouter", "ollama"]).nullable().optional().describe("Site-wide default for AI meal-plan generation."),
|
||||
DEFAULT_MEAL_PLAN_MODEL: z.string().nullable().optional(),
|
||||
AI_TOOL_CALLING_ENABLED: z.string().nullable().optional().describe("\"false\" disables the chatbot's createRecipe/addToShoppingList tools (e.g. for a model that can't reliably call tools); any other value or unset means enabled."),
|
||||
}).describe("Unknown keys are silently ignored. Setting a key to null or \"\" deletes it (falls back to env var)."));
|
||||
|
||||
const TestEmailBodyRef = registry.register("TestEmailBody", z.object({ to: z.string().min(1) }));
|
||||
|
||||
Reference in New Issue
Block a user