Skip to content

Commit 042c578

Browse files
Merge pull request #2155 from redpanda-data/ts/remove-deprecated-ai-gateway-api
Remove deprecated AI Gateway API
2 parents f2e5f3e + 7aa0bd1 commit 042c578

File tree

15 files changed

+30
-4780
lines changed

15 files changed

+30
-4780
lines changed

backend/pkg/protogen/redpanda/api/dataplane/v1alpha3/ai_gateway.pb.go

Lines changed: 0 additions & 1651 deletions
This file was deleted.

backend/pkg/protogen/redpanda/api/dataplane/v1alpha3/ai_gateway.pb.gw.go

Lines changed: 0 additions & 641 deletions
This file was deleted.

backend/pkg/protogen/redpanda/api/dataplane/v1alpha3/ai_gateway_grpc.pb.go

Lines changed: 0 additions & 372 deletions
This file was deleted.

backend/pkg/protogen/redpanda/api/dataplane/v1alpha3/dataplanev1alpha3connect/ai_gateway.connect.go

Lines changed: 0 additions & 314 deletions
This file was deleted.

backend/pkg/protogen/redpanda/api/dataplane/v1alpha3/dataplanev1alpha3connect/ai_gateway.connect.gw.go

Lines changed: 0 additions & 77 deletions
This file was deleted.

frontend/src/components/pages/agents/create/ai-agent-create-page.tsx

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,9 @@ import {
4848
AIAgentCreateSchema,
4949
CreateAIAgentRequestSchema,
5050
} from 'protogen/redpanda/api/dataplane/v1alpha3/ai_agent_pb';
51-
import { type AIGateway, AIGateway_State } from 'protogen/redpanda/api/dataplane/v1alpha3/ai_gateway_pb';
5251
import { useEffect, useMemo, useRef, useState } from 'react';
5352
import { Controller, useFieldArray, useForm } from 'react-hook-form';
5453
import { useCreateAIAgentMutation } from 'react-query/api/ai-agent';
55-
import { useListAIGatewaysQuery } from 'react-query/api/ai-gateway';
5654
import { useListMCPServersQuery } from 'react-query/api/remote-mcp';
5755
import { useCreateSecretMutation, useListSecretsQuery } from 'react-query/api/secret';
5856
import { toast } from 'sonner';
@@ -74,32 +72,6 @@ export const AIAgentCreatePage = () => {
7472
skipInvalidation: true,
7573
});
7674

77-
// Gateway detection
78-
const { data: gatewaysData, isLoading: isLoadingGateways } = useListAIGatewaysQuery(
79-
{ pageSize: -1 },
80-
{ enabled: true }
81-
);
82-
83-
const hasGatewayDeployed = useMemo(() => {
84-
if (isLoadingGateways) {
85-
return false;
86-
}
87-
return Boolean(gatewaysData?.aiGateways && gatewaysData.aiGateways.length > 0);
88-
}, [gatewaysData, isLoadingGateways]);
89-
90-
const availableGateways = useMemo(() => {
91-
if (!gatewaysData?.aiGateways) {
92-
return [];
93-
}
94-
return gatewaysData.aiGateways
95-
.filter((gw: AIGateway) => gw.state === AIGateway_State.RUNNING)
96-
.map((gw: AIGateway) => ({
97-
id: gw.id,
98-
displayName: gw.displayName,
99-
description: gw.description,
100-
}));
101-
}, [gatewaysData]);
102-
10375
// Ref to ServiceAccountSelector to call createServiceAccount
10476
const serviceAccountSelectorRef = useRef<ServiceAccountSelectorRef>(null);
10577

@@ -492,7 +464,7 @@ export const AIAgentCreatePage = () => {
492464
</CardHeader>
493465
<CardContent>
494466
<LLMConfigSection
495-
availableGateways={availableGateways}
467+
availableGateways={[]}
496468
availableSecrets={availableSecrets}
497469
fieldNames={{
498470
provider: 'provider',
@@ -503,7 +475,7 @@ export const AIAgentCreatePage = () => {
503475
gatewayId: 'gatewayId',
504476
}}
505477
form={form}
506-
hasGatewayDeployed={hasGatewayDeployed}
478+
hasGatewayDeployed={false}
507479
mode="create"
508480
scopes={[Scope.MCP_SERVER, Scope.AI_AGENT]}
509481
showBaseUrl={form.watch('provider') === 'openaiCompatible'}

frontend/src/components/pages/agents/details/ai-agent-configuration-tab.tsx

Lines changed: 25 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,8 @@ import {
6363
AIAgentUpdateSchema,
6464
UpdateAIAgentRequestSchema,
6565
} from 'protogen/redpanda/api/dataplane/v1alpha3/ai_agent_pb';
66-
import { type AIGateway, AIGateway_State } from 'protogen/redpanda/api/dataplane/v1alpha3/ai_gateway_pb';
6766
import { useCallback, useMemo, useState } from 'react';
6867
import { useGetAIAgentQuery, useUpdateAIAgentMutation } from 'react-query/api/ai-agent';
69-
import { useListAIGatewaysQuery } from 'react-query/api/ai-gateway';
7068
import { type MCPServer, useListMCPServersQuery } from 'react-query/api/remote-mcp';
7169
import { useListSecretsQuery } from 'react-query/api/secret';
7270
import { toast } from 'sonner';
@@ -315,32 +313,6 @@ export const AIAgentConfigurationTab = () => {
315313
const { data: mcpServersData } = useListMCPServersQuery();
316314
const { data: secretsData } = useListSecretsQuery();
317315

318-
// Gateway detection
319-
const { data: gatewaysData, isLoading: isLoadingGateways } = useListAIGatewaysQuery(
320-
{ pageSize: -1 },
321-
{ enabled: true }
322-
);
323-
324-
const hasGatewayDeployed = useMemo(() => {
325-
if (isLoadingGateways) {
326-
return false;
327-
}
328-
return Boolean(gatewaysData?.aiGateways && gatewaysData.aiGateways.length > 0);
329-
}, [gatewaysData, isLoadingGateways]);
330-
331-
const availableGateways = useMemo(() => {
332-
if (!gatewaysData?.aiGateways) {
333-
return [];
334-
}
335-
return gatewaysData.aiGateways
336-
.filter((gw: AIGateway) => gw.state === AIGateway_State.RUNNING)
337-
.map((gw: AIGateway) => ({
338-
id: gw.id,
339-
displayName: gw.displayName,
340-
description: gw.description,
341-
}));
342-
}, [gatewaysData]);
343-
344316
const [isEditing, setIsEditing] = useState(false);
345317
const [editedAgentData, setEditedAgentData] = useState<LocalAIAgent | null>(null);
346318
const [expandedSubagent, setExpandedSubagent] = useState<string | undefined>(undefined);
@@ -1135,35 +1107,10 @@ export const AIAgentConfigurationTab = () => {
11351107
<CardContent className="px-4 pb-4">
11361108
{isEditing ? (
11371109
<div className="space-y-4">
1138-
{/* Gateway Selection - only show if gateways deployed */}
1139-
{hasGatewayDeployed && availableGateways.length > 0 && (
1140-
<div className="space-y-2">
1141-
<Label>AI Gateway</Label>
1142-
<Text className="text-muted-foreground text-xs">Route requests through an AI Gateway</Text>
1143-
<Select
1144-
onValueChange={(value) => updateField({ gatewayId: value || undefined })}
1145-
value={displayData.gatewayId || ''}
1146-
>
1147-
<SelectTrigger>
1148-
<SelectValue placeholder="No gateway" />
1149-
</SelectTrigger>
1150-
<SelectContent>
1151-
<SelectItem value="">No gateway</SelectItem>
1152-
{availableGateways.map((gw: { id: string; displayName: string; description: string }) => (
1153-
<SelectItem key={gw.id} value={gw.id}>
1154-
{gw.displayName}
1155-
</SelectItem>
1156-
))}
1157-
</SelectContent>
1158-
</Select>
1159-
</div>
1160-
)}
1161-
11621110
{/* Provider - now editable */}
11631111
<div className="space-y-2">
11641112
<Label htmlFor="provider">Provider</Label>
11651113
<Select
1166-
disabled={!!displayData.gatewayId}
11671114
onValueChange={(value: 'openai' | 'anthropic' | 'google' | 'openaiCompatible') => {
11681115
const newProviderData = MODEL_OPTIONS_BY_PROVIDER[value];
11691116
const firstModel =
@@ -1224,14 +1171,12 @@ export const AIAgentConfigurationTab = () => {
12241171
<Label htmlFor="model">Model</Label>
12251172
{displayData.provider?.provider.case === 'openaiCompatible' ? (
12261173
<Input
1227-
disabled={!!displayData.gatewayId}
12281174
onChange={(e) => updateField({ model: e.target.value })}
12291175
placeholder="Enter model name (e.g., llama-3.1-70b)"
12301176
value={displayData.model}
12311177
/>
12321178
) : (
12331179
<Select
1234-
disabled={!!displayData.gatewayId}
12351180
onValueChange={(value) => updateField({ model: value })}
12361181
value={displayData.model}
12371182
>
@@ -1295,25 +1240,23 @@ export const AIAgentConfigurationTab = () => {
12951240
)}
12961241
</div>
12971242

1298-
{/* API Token - HIDE if using gateway */}
1299-
{!displayData.gatewayId && (
1300-
<div className="space-y-2">
1301-
<Label htmlFor="apiKeySecret">API Token</Label>
1302-
<div className="[&>div]:flex-col [&>div]:items-stretch [&>div]:gap-2">
1303-
<SecretSelector
1304-
availableSecrets={availableSecrets}
1305-
customText={AI_AGENT_SECRET_TEXT}
1306-
onChange={(value) => updateField({ apiKeySecret: value })}
1307-
placeholder="Select from secrets store or create new"
1308-
scopes={[Scope.MCP_SERVER, Scope.AI_AGENT]}
1309-
value={displayData.apiKeySecret}
1310-
/>
1311-
</div>
1243+
{/* API Token */}
1244+
<div className="space-y-2">
1245+
<Label htmlFor="apiKeySecret">API Token</Label>
1246+
<div className="[&>div]:flex-col [&>div]:items-stretch [&>div]:gap-2">
1247+
<SecretSelector
1248+
availableSecrets={availableSecrets}
1249+
customText={AI_AGENT_SECRET_TEXT}
1250+
onChange={(value) => updateField({ apiKeySecret: value })}
1251+
placeholder="Select from secrets store or create new"
1252+
scopes={[Scope.MCP_SERVER, Scope.AI_AGENT]}
1253+
value={displayData.apiKeySecret}
1254+
/>
13121255
</div>
1313-
)}
1256+
</div>
13141257

1315-
{/* Base URL - only show for openaiCompatible and when not using gateway */}
1316-
{!displayData.gatewayId && displayData.provider?.provider.case === 'openaiCompatible' && (
1258+
{/* Base URL - only show for openaiCompatible */}
1259+
{displayData.provider?.provider.case === 'openaiCompatible' && (
13171260
<div className="space-y-2">
13181261
<Label htmlFor="baseUrl">Base URL (required)</Label>
13191262
<Input
@@ -1341,23 +1284,6 @@ export const AIAgentConfigurationTab = () => {
13411284
</div>
13421285
) : (
13431286
<div className="space-y-4">
1344-
{/* Gateway - only show if gateways deployed */}
1345-
{hasGatewayDeployed && availableGateways.length > 0 && (
1346-
<div className="space-y-2">
1347-
<Label>AI Gateway</Label>
1348-
<div className="flex h-10 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2">
1349-
<Text variant="default">
1350-
{displayData.gatewayId
1351-
? availableGateways.find(
1352-
(gw: { id: string; displayName: string; description: string }) =>
1353-
gw.id === displayData.gatewayId
1354-
)?.displayName || displayData.gatewayId
1355-
: 'None'}
1356-
</Text>
1357-
</div>
1358-
</div>
1359-
)}
1360-
13611287
<div className="space-y-2">
13621288
<Label>Provider</Label>
13631289
<div className="flex h-10 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2">
@@ -1375,25 +1301,21 @@ export const AIAgentConfigurationTab = () => {
13751301
<AIAgentModel model={displayData.model} />
13761302
</div>
13771303
</div>
1378-
{/* API Token - HIDE if using gateway */}
1379-
{!displayData.gatewayId && (
1304+
{/* API Token */}
1305+
<div className="space-y-2">
1306+
<Label>API Token</Label>
1307+
<div className="flex h-10 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2">
1308+
<Text variant="default">{displayData.apiKeySecret || 'No secret configured'}</Text>
1309+
</div>
1310+
</div>
1311+
{agent.provider?.provider.case === 'openaiCompatible' && displayData.baseUrl && (
13801312
<div className="space-y-2">
1381-
<Label>API Token</Label>
1313+
<Label>Base URL</Label>
13821314
<div className="flex h-10 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2">
1383-
<Text variant="default">{displayData.apiKeySecret || 'No secret configured'}</Text>
1315+
<Text variant="default">{displayData.baseUrl}</Text>
13841316
</div>
13851317
</div>
13861318
)}
1387-
{!displayData.gatewayId &&
1388-
agent.provider?.provider.case === 'openaiCompatible' &&
1389-
displayData.baseUrl && (
1390-
<div className="space-y-2">
1391-
<Label>Base URL</Label>
1392-
<div className="flex h-10 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2">
1393-
<Text variant="default">{displayData.baseUrl}</Text>
1394-
</div>
1395-
</div>
1396-
)}
13971319
<div className="space-y-2">
13981320
<Label>Max Iterations</Label>
13991321
<div className="flex h-10 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2">

frontend/src/protogen/redpanda/api/dataplane/v1alpha3/ai_gateway-AIGatewayService_connectquery.ts

Lines changed: 0 additions & 55 deletions
This file was deleted.

0 commit comments

Comments
 (0)