908aefe7c1
## 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)
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { createOneAgent } from 'test/integration/metadata/suites/agent/utils/create-one-agent.util';
|
|
import { deleteOneAgent } from 'test/integration/metadata/suites/agent/utils/delete-one-agent.util';
|
|
import { findOneAgent } from 'test/integration/metadata/suites/agent/utils/find-one-agent.util';
|
|
|
|
describe('Agent deletion should succeed', () => {
|
|
it('should successfully delete a custom agent', async () => {
|
|
const { data: createData } = await createOneAgent({
|
|
expectToFail: false,
|
|
input: {
|
|
label: 'Agent To Delete',
|
|
prompt: 'This agent will be deleted',
|
|
modelId: 'openai/gpt-4.1',
|
|
},
|
|
});
|
|
|
|
const agentId = createData.createOneAgent.id;
|
|
|
|
const { data: findBeforeData } = await findOneAgent({
|
|
expectToFail: false,
|
|
input: { id: agentId },
|
|
});
|
|
|
|
expect(findBeforeData.findOneAgent.id).toBe(agentId);
|
|
|
|
const { data: deleteData } = await deleteOneAgent({
|
|
expectToFail: false,
|
|
input: { id: agentId },
|
|
});
|
|
|
|
expect(deleteData.deleteOneAgent).toMatchObject({
|
|
id: agentId,
|
|
});
|
|
|
|
const { errors: findAfterErrors } = await findOneAgent({
|
|
expectToFail: true,
|
|
input: { id: agentId },
|
|
});
|
|
|
|
expect(findAfterErrors).toBeDefined();
|
|
});
|
|
});
|