Skip to content

Commit 8122e8e

Browse files
committed
Fix ListModelsAsync JSON deserialization error (#1)
- Change ModelInfo.ParametersNumber from long? to string? to handle API responses like "8B", "70B" instead of numeric values - Add guardrail tests for various parameters_number formats - Bump version to 1.0.2
1 parent 0bd9c12 commit 8122e8e

File tree

4 files changed

+71
-7
lines changed

4 files changed

+71
-7
lines changed

src/CompactifAI.Client/CompactifAI.Client.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<!-- NuGet Package Properties -->
1010
<PackageId>CompactifAI.Client</PackageId>
11-
<Version>1.0.1</Version>
11+
<Version>1.0.2</Version>
1212
<Authors>GmausDev</Authors>
1313
<Company>GmausDev</Company>
1414
<Description>A .NET client library for the CompactifAI API. Easily integrate AI chat completions, text completions, and audio transcription into your .NET applications.</Description>

src/CompactifAI.Client/Models/ModelModels.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ public class ModelInfo
5050
public string OwnedBy { get; set; } = string.Empty;
5151

5252
/// <summary>
53-
/// The number of parameters in the model.
53+
/// The number of parameters in the model (e.g., "8B", "70B").
5454
/// </summary>
5555
[JsonPropertyName("parameters_number")]
56-
public long? ParametersNumber { get; set; }
56+
public string? ParametersNumber { get; set; }
5757

5858
/// <summary>
5959
/// The capabilities of the model.

tests/CompactifAI.Client.Tests/CompactifAIClientTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ public async Task GetModelAsync_ReturnsModelInfo()
279279
{
280280
Id = CompactifAIModels.DeepSeekR1_Slim,
281281
OwnedBy = "compactifai",
282-
ParametersNumber = 70000000000
282+
ParametersNumber = "70B"
283283
};
284284

285285
_mockHttp.When(HttpMethod.Get, $"https://api.compactif.ai/v1/models/{CompactifAIModels.DeepSeekR1_Slim}")
@@ -290,7 +290,7 @@ public async Task GetModelAsync_ReturnsModelInfo()
290290

291291
// Assert
292292
Assert.Equal(CompactifAIModels.DeepSeekR1_Slim, result.Id);
293-
Assert.Equal(70000000000, result.ParametersNumber);
293+
Assert.Equal("70B", result.ParametersNumber);
294294
}
295295

296296
#endregion

tests/CompactifAI.Client.Tests/ModelsTests.cs

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ public void ModelsResponse_Deserializes_Correctly()
259259
"object": "model",
260260
"created": 1234567890,
261261
"owned_by": "compactifai",
262-
"parameters_number": 8000000000,
262+
"parameters_number": "8B",
263263
"capabilities": {
264264
"chat": true,
265265
"completion": true,
@@ -276,11 +276,75 @@ public void ModelsResponse_Deserializes_Correctly()
276276
Assert.Equal("list", response.Object);
277277
Assert.Single(response.Data);
278278
Assert.Equal("cai-llama-3-1-8b-slim", response.Data[0].Id);
279-
Assert.Equal(8000000000, response.Data[0].ParametersNumber);
279+
Assert.Equal("8B", response.Data[0].ParametersNumber);
280280
Assert.True(response.Data[0].Capabilities?.Chat);
281281
Assert.False(response.Data[0].Capabilities?.Transcription);
282282
}
283283

284+
[Theory]
285+
[InlineData("\"8B\"", "8B")]
286+
[InlineData("\"70B\"", "70B")]
287+
[InlineData("\"1.5B\"", "1.5B")]
288+
[InlineData("\"8000000000\"", "8000000000")]
289+
[InlineData("null", null)]
290+
public void ModelsResponse_ParametersNumber_HandlesVariousFormats(string parametersValue, string? expected)
291+
{
292+
var json = $$"""
293+
{
294+
"object": "list",
295+
"data": [
296+
{
297+
"id": "test-model",
298+
"object": "model",
299+
"created": 1234567890,
300+
"owned_by": "compactifai",
301+
"parameters_number": {{parametersValue}},
302+
"capabilities": {
303+
"chat": true,
304+
"completion": false,
305+
"transcription": false
306+
}
307+
}
308+
]
309+
}
310+
""";
311+
312+
var response = JsonSerializer.Deserialize<ModelsResponse>(json, _jsonOptions);
313+
314+
Assert.NotNull(response);
315+
Assert.Single(response.Data);
316+
Assert.Equal(expected, response.Data[0].ParametersNumber);
317+
}
318+
319+
[Fact]
320+
public void ModelsResponse_Deserializes_WithMissingParametersNumber()
321+
{
322+
var json = """
323+
{
324+
"object": "list",
325+
"data": [
326+
{
327+
"id": "test-model",
328+
"object": "model",
329+
"created": 1234567890,
330+
"owned_by": "compactifai",
331+
"capabilities": {
332+
"chat": true,
333+
"completion": false,
334+
"transcription": false
335+
}
336+
}
337+
]
338+
}
339+
""";
340+
341+
var response = JsonSerializer.Deserialize<ModelsResponse>(json, _jsonOptions);
342+
343+
Assert.NotNull(response);
344+
Assert.Single(response.Data);
345+
Assert.Null(response.Data[0].ParametersNumber);
346+
}
347+
284348
#endregion
285349

286350
#region Tool Serialization Tests

0 commit comments

Comments
 (0)