Skip to content

Commit 3048948

Browse files
committed
add compatible models in brickinstance details
1 parent 537694f commit 3048948

File tree

5 files changed

+76
-17
lines changed

5 files changed

+76
-17
lines changed

internal/api/docs/openapi.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,15 @@ components:
11471147
$ref: '#/components/schemas/ErrorResponse'
11481148
description: Precondition Failed
11491149
schemas:
1150+
AIModel:
1151+
properties:
1152+
description:
1153+
type: string
1154+
id:
1155+
type: string
1156+
name:
1157+
type: string
1158+
type: object
11501159
AIModelItem:
11511160
properties:
11521161
brick_ids:
@@ -1336,6 +1345,10 @@ components:
13361345
type: string
13371346
category:
13381347
type: string
1348+
compatible_models:
1349+
items:
1350+
$ref: '#/components/schemas/AIModel'
1351+
type: array
13391352
config_variables:
13401353
items:
13411354
$ref: '#/components/schemas/BrickConfigVariable'

internal/e2e/client/client.gen.go

Lines changed: 16 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/e2e/daemon/instance_bricks_test.go renamed to internal/e2e/daemon/bricks_instance_test.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ var (
5151
Value: f.Ptr("/models/ootb/ei/mobilenet-v2-224px.eim"),
5252
},
5353
}
54+
55+
expectedModelInfo = []client.AIModel{
56+
{
57+
Id: f.Ptr("mobilenet-image-classification"),
58+
Name: f.Ptr("General purpose image classification"),
59+
Description: f.Ptr("General purpose image classification model based on MobileNetV2. This model is trained on the ImageNet dataset and can classify images into 1000 categories."),
60+
},
61+
{
62+
Id: f.Ptr("person-classification"),
63+
Name: f.Ptr("Person classification"),
64+
Description: f.Ptr("Person classification model based on WakeVision dataset. This model is trained to classify images into two categories: person and not-person."),
65+
}}
5466
)
5567

5668
func setupTestApp(t *testing.T) (*client.CreateAppResp, *client.ClientWithResponses) {
@@ -78,7 +90,6 @@ func setupTestApp(t *testing.T) (*client.CreateAppResp, *client.ClientWithRespon
7890
)
7991
require.NoError(t, err)
8092
require.Equal(t, http.StatusOK, resp.StatusCode())
81-
8293
return createResp, httpClient
8394
}
8495

@@ -135,6 +146,20 @@ func TestGetAppBrickInstanceById(t *testing.T) {
135146
require.NotEmpty(t, brickInstance.JSON200)
136147
require.Equal(t, ImageClassifactionBrickID, *brickInstance.JSON200.Id)
137148
require.Equal(t, expectedConfigVariables, (*brickInstance.JSON200.ConfigVariables))
149+
require.Nil(t, brickInstance.JSON200.CompatibleModels)
150+
})
151+
152+
t.Run("GetAppBrickInstanceByBrickIDWithCompatibleModels_Success", func(t *testing.T) {
153+
brickInstance, err := httpClient.GetAppBrickInstanceByBrickIDWithResponse(
154+
t.Context(),
155+
*createResp.JSON201.Id,
156+
ImageClassifactionBrickID,
157+
func(ctx context.Context, req *http.Request) error { return nil })
158+
require.NoError(t, err)
159+
require.NotEmpty(t, brickInstance.JSON200)
160+
require.Equal(t, ImageClassifactionBrickID, *brickInstance.JSON200.Id)
161+
require.NotNil(t, brickInstance.JSON200.CompatibleModels)
162+
require.Equal(t, expectedModelInfo, *(brickInstance.JSON200.CompatibleModels))
138163
})
139164

140165
t.Run("GetAppBrickInstanceByBrickID_InvalidAppID_Fails", func(t *testing.T) {

internal/orchestrator/bricks/bricks.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,13 @@ func (s *Service) AppBrickInstanceDetails(a *app.ArduinoApp, brickID string) (Br
124124
Variables: variables,
125125
ConfigVariables: configVariables,
126126
ModelID: modelID,
127+
CompatibleModels: f.Map(s.modelsIndex.GetModelsByBrick(brick.ID), func(m modelsindex.AIModel) AIModel {
128+
return AIModel{
129+
ID: m.ID,
130+
Name: m.Name,
131+
Description: m.ModuleDescription,
132+
}
133+
}),
127134
}, nil
128135
}
129136

internal/orchestrator/bricks/types.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@ type AppBrickInstancesResult struct {
3434
}
3535

3636
type BrickInstance struct {
37-
ID string `json:"id"`
38-
Name string `json:"name"`
39-
Author string `json:"author"`
40-
Category string `json:"category"`
41-
Status string `json:"status"`
42-
Variables map[string]string `json:"variables,omitempty" description:"Deprecated: use config_variables instead. This field is kept for backward compatibility."`
43-
ConfigVariables []BrickConfigVariable `json:"config_variables,omitempty"`
44-
ModelID string `json:"model,omitempty"`
37+
ID string `json:"id"`
38+
Name string `json:"name"`
39+
Author string `json:"author"`
40+
Category string `json:"category"`
41+
Status string `json:"status"`
42+
Variables map[string]string `json:"variables,omitempty" description:"Deprecated: use config_variables instead. This field is kept for backward compatibility."`
43+
ConfigVariables []BrickConfigVariable `json:"config_variables,omitempty"`
44+
ModelID string `json:"model,omitempty"`
45+
CompatibleModels []AIModel `json:"compatible_models,omitempty"`
4546
}
4647

48+
type AIModel struct {
49+
ID string `json:"id"`
50+
Name string `json:"name"`
51+
Description string `json:"description"`
52+
}
4753
type BrickConfigVariable struct {
4854
Name string `json:"name"`
4955
Value string `json:"value"`

0 commit comments

Comments
 (0)