Skip to content

Commit 92427fb

Browse files
committed
feat(ui): add model providers api
Signed-off-by: Petr Bulánek <[email protected]>
1 parent ea5f1b7 commit 92427fb

File tree

6 files changed

+144
-16
lines changed

6 files changed

+144
-16
lines changed

apps/agentstack-sdk-ts/src/client/api/configuration/schemas.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ export const systemConfigurationSchema = z.object({
1313
default_llm_model: z.string().nullish(),
1414
});
1515

16-
export const readSystemConfigurationRequestSchema = z.never();
17-
1816
export const readSystemConfigurationResponseSchema = systemConfigurationSchema;
1917

2018
export const updateSystemConfigurationRequestSchema = z.object({

apps/agentstack-sdk-ts/src/client/api/configuration/types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import type z from 'zod';
77

88
import type {
9-
readSystemConfigurationRequestSchema,
109
readSystemConfigurationResponseSchema,
1110
systemConfigurationSchema,
1211
updateSystemConfigurationRequestSchema,
@@ -15,7 +14,6 @@ import type {
1514

1615
export type SystemConfiguration = z.infer<typeof systemConfigurationSchema>;
1716

18-
export type ReadSystemConfigurationRequest = z.infer<typeof readSystemConfigurationRequestSchema>;
1917
export type ReadSystemConfigurationResponse = z.infer<typeof readSystemConfigurationResponseSchema>;
2018

2119
export type UpdateSystemConfigurationRequest = z.infer<typeof updateSystemConfigurationRequestSchema>;

apps/agentstack-sdk-ts/src/client/api/model-providers/api.ts

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,63 @@
55

66
import type { CallApi } from '../../client/types';
77
import { ApiMethod } from '../../client/types';
8-
import { modelProvidersMatchResponseSchema } from './schemas';
9-
import type { ModelProvidersMatchRequest } from './types';
8+
import {
9+
createModelProviderResponseSchema,
10+
deleteModelProviderResponseSchema,
11+
listModelProvidersResponseSchema,
12+
matchModelProvidersResponseSchema,
13+
readModelProviderResponseSchema,
14+
} from './schemas';
15+
import type {
16+
CreateModelProviderRequest,
17+
DeleteModelProviderRequest,
18+
MatchModelProvidersRequest,
19+
ReadModelProviderRequest,
20+
} from './types';
1021

1122
export function createModelProvidersApi(callApi: CallApi) {
12-
const matchModelProviders = ({ ...body }: ModelProvidersMatchRequest) =>
23+
const listModelProviders = () =>
24+
callApi({
25+
method: ApiMethod.Get,
26+
path: '/api/v1/model_providers',
27+
schema: listModelProvidersResponseSchema,
28+
});
29+
30+
const createModelProvider = ({ ...body }: CreateModelProviderRequest) =>
31+
callApi({
32+
method: ApiMethod.Post,
33+
path: '/api/v1/model_providers',
34+
schema: createModelProviderResponseSchema,
35+
body,
36+
});
37+
38+
const readModelProvider = ({ model_provider_id }: ReadModelProviderRequest) =>
39+
callApi({
40+
method: ApiMethod.Get,
41+
path: `/api/v1/model_providers/${model_provider_id}`,
42+
schema: readModelProviderResponseSchema,
43+
});
44+
45+
const deleteModelProvider = ({ model_provider_id }: DeleteModelProviderRequest) =>
46+
callApi({
47+
method: ApiMethod.Delete,
48+
path: `/api/v1/model_providers/${model_provider_id}`,
49+
schema: deleteModelProviderResponseSchema,
50+
});
51+
52+
const matchModelProviders = ({ ...body }: MatchModelProvidersRequest) =>
1353
callApi({
1454
method: ApiMethod.Post,
1555
path: '/api/v1/model_providers/match',
16-
schema: modelProvidersMatchResponseSchema,
56+
schema: matchModelProvidersResponseSchema,
1757
body,
1858
});
1959

2060
return {
61+
listModelProviders,
62+
createModelProvider,
63+
readModelProvider,
64+
deleteModelProvider,
2165
matchModelProviders,
2266
};
2367
}

apps/agentstack-sdk-ts/src/client/api/model-providers/schemas.ts

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,57 @@
66
import z from 'zod';
77

88
import { paginatedResponseSchema } from '../../client/schemas';
9-
import { ModelCapability } from './types';
9+
import { ModelCapability, ModelProviderType } from './types';
1010

1111
export const modelCapabilitySchema = z.enum(ModelCapability);
1212

13-
export const modelProvidersMatchRequestSchema = z.object({
13+
export const modelProviderTypeSchema = z.enum(ModelProviderType);
14+
15+
export const modelProviderSchema = z.object({
16+
id: z.string(),
17+
base_url: z.string(),
18+
created_at: z.string(),
19+
capabilities: z.array(modelCapabilitySchema),
20+
name: z.string().nullish(),
21+
description: z.string().nullish(),
22+
type: modelProviderTypeSchema,
23+
});
24+
25+
export const listModelProvidersResponseSchema = paginatedResponseSchema.extend({
26+
items: z.array(modelProviderSchema),
27+
});
28+
29+
export const createModelProviderRequestSchema = z.object({
30+
api_key: z.string(),
31+
base_url: z.string(),
32+
type: modelProviderTypeSchema,
33+
name: z.string().nullish(),
34+
description: z.string().nullish(),
35+
watsonx_project_id: z.string().nullish(),
36+
watsonx_space_id: z.string().nullish(),
37+
});
38+
39+
export const createModelProviderResponseSchema = modelProviderSchema;
40+
41+
export const readModelProviderRequestSchema = z.object({
42+
model_provider_id: z.string(),
43+
});
44+
45+
export const readModelProviderResponseSchema = modelProviderSchema;
46+
47+
export const deleteModelProviderRequestSchema = z.object({
48+
model_provider_id: z.string(),
49+
});
50+
51+
export const deleteModelProviderResponseSchema = z.null();
52+
53+
export const matchModelProvidersRequestSchema = z.object({
1454
suggested_models: z.array(z.string()).nullable(),
1555
capability: modelCapabilitySchema,
1656
score_cutoff: z.number(),
1757
});
1858

19-
export const modelProvidersMatchResponseSchema = paginatedResponseSchema.extend({
59+
export const matchModelProvidersResponseSchema = paginatedResponseSchema.extend({
2060
items: z.array(
2161
z.object({
2262
model_id: z.string(),

apps/agentstack-sdk-ts/src/client/api/model-providers/types.ts

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,60 @@
55

66
import type z from 'zod';
77

8-
import type { modelProvidersMatchRequestSchema, modelProvidersMatchResponseSchema } from './schemas';
8+
import type {
9+
createModelProviderRequestSchema,
10+
createModelProviderResponseSchema,
11+
deleteModelProviderRequestSchema,
12+
deleteModelProviderResponseSchema,
13+
listModelProvidersResponseSchema,
14+
matchModelProvidersRequestSchema,
15+
matchModelProvidersResponseSchema,
16+
modelProviderSchema,
17+
readModelProviderRequestSchema,
18+
readModelProviderResponseSchema,
19+
} from './schemas';
920

1021
export enum ModelCapability {
1122
Llm = 'llm',
1223
Embedding = 'embedding',
1324
}
1425

15-
export type ModelProvidersMatchRequest = z.infer<typeof modelProvidersMatchRequestSchema>;
16-
export type ModelProvidersMatchResponse = z.infer<typeof modelProvidersMatchResponseSchema>;
26+
export enum ModelProviderType {
27+
Anthropic = 'anthropic',
28+
Cerebras = 'cerebras',
29+
Chutes = 'chutes',
30+
Cohere = 'cohere',
31+
DeepSeek = 'deepseek',
32+
Gemini = 'gemini',
33+
GitHub = 'github',
34+
Groq = 'groq',
35+
Watsonx = 'watsonx',
36+
Jan = 'jan',
37+
Mistral = 'mistral',
38+
Moonshot = 'moonshot',
39+
Nvidia = 'nvidia',
40+
Ollama = 'ollama',
41+
OpenAI = 'openai',
42+
OpenRouter = 'openrouter',
43+
Perplexity = 'perplexity',
44+
Together = 'together',
45+
Voyage = 'voyage',
46+
Rits = 'rits',
47+
Other = 'other',
48+
}
49+
50+
export type ModelProvider = z.infer<typeof modelProviderSchema>;
51+
52+
export type ListModelProvidersResponse = z.infer<typeof listModelProvidersResponseSchema>;
53+
54+
export type CreateModelProviderRequest = z.infer<typeof createModelProviderRequestSchema>;
55+
export type CreateModelProviderResponse = z.infer<typeof createModelProviderResponseSchema>;
56+
57+
export type ReadModelProviderRequest = z.infer<typeof readModelProviderRequestSchema>;
58+
export type ReadModelProviderResponse = z.infer<typeof readModelProviderResponseSchema>;
59+
60+
export type DeleteModelProviderRequest = z.infer<typeof deleteModelProviderRequestSchema>;
61+
export type DeleteModelProviderResponse = z.infer<typeof deleteModelProviderResponseSchema>;
62+
63+
export type MatchModelProvidersRequest = z.infer<typeof matchModelProvidersRequestSchema>;
64+
export type MatchModelProvidersResponse = z.infer<typeof matchModelProvidersResponseSchema>;

apps/agentstack-ui/src/modules/platform-context/api/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type {
1010
ListContextHistoryRequest,
1111
ListContextsRequest,
1212
} from 'agentstack-sdk';
13-
import { type ModelProvidersMatchRequest, unwrapResult } from 'agentstack-sdk';
13+
import { type MatchModelProvidersRequest, unwrapResult } from 'agentstack-sdk';
1414

1515
import { agentStackClient } from '#api/agentstack-client.ts';
1616
import { fetchEntity } from '#api/utils.ts';
@@ -53,7 +53,7 @@ export async function patchContextMetadata(request: PatchContextMetadataRequest)
5353
return result;
5454
}
5555

56-
export async function matchModelProviders(request: ModelProvidersMatchRequest) {
56+
export async function matchModelProviders(request: MatchModelProvidersRequest) {
5757
const response = await agentStackClient.matchModelProviders(request);
5858
const result = unwrapResult(response);
5959

0 commit comments

Comments
 (0)