Files
twenty/packages/twenty-front/src/modules/ai/utils/isUIToolCallMessage.ts
T
Félix Malfait 908aefe7c1 feat: replace hardcoded AI model constants with JSON seed catalog (#18818)
## Summary

- Replaces per-provider TypeScript constant files
(`openai-models.const.ts`, `anthropic-models.const.ts`, etc.) with a
single `ai-providers.json` catalog as the source of truth
- Adds runtime model discovery via AI SDK for self-hosted providers,
with `models.dev` enrichment for pricing/capabilities
- Introduces composite model IDs (`provider/modelId`) for canonical,
conflict-free identification
- Simplifies provider configuration: API keys are injected from
environment variables (e.g., `OPENAI_API_KEY`)
- Adds admin panel UI for provider management (add/remove/test), model
discovery, recommended model configuration, and default fast/smart model
selection per workspace
- Removes deprecated config variables (`AI_DISABLED_MODEL_IDS`,
`AUTO_ENABLE_NEW_AI_MODELS`, etc.)
- Adds database migration for composite model ID format

## Test plan

- [ ] Server typecheck passes
- [ ] Frontend typecheck passes
- [ ] Server unit tests pass
- [ ] Frontend unit tests pass
- [ ] CI pipeline green
- [ ] Admin panel AI tab loads correctly
- [ ] Provider discovery works for configured providers
- [ ] Model recommendation toggles persist
- [ ] Default fast/smart model selection works


Made with [Cursor](https://cursor.com)
2026-03-21 16:03:58 +01:00

16 lines
490 B
TypeScript

import { type ExtendedUIMessage } from 'twenty-shared/ai';
type ToolCallInput = { toolName?: string };
const isToolCallInput = (value: unknown): value is ToolCallInput =>
typeof value === 'object' && value !== null && 'toolName' in value;
export const isUIToolCallMessage = (message: ExtendedUIMessage) => {
return message.parts.some(
(part) =>
part.type === 'tool-execute_tool' &&
isToolCallInput(part.input) &&
part.input.toolName === 'navigate_app',
);
};