@@ -53,6 +53,8 @@ public function testDefaultConstructor(): void
53
53
$ this ->assertNull ($ config ->getLogprobs ());
54
54
$ this ->assertNull ($ config ->getTopLogprobs ());
55
55
$ this ->assertNull ($ config ->getTools ());
56
+ $ this ->assertNull ($ config ->getOutputMimeType ());
57
+ $ this ->assertNull ($ config ->getOutputSchema ());
56
58
$ this ->assertEquals ([], $ config ->getCustomOptions ());
57
59
}
58
60
@@ -122,6 +124,20 @@ public function testSettersAndGetters(): void
122
124
$ config ->setTools ($ tools );
123
125
$ this ->assertEquals ($ tools , $ config ->getTools ());
124
126
127
+ // Test output MIME type
128
+ $ config ->setOutputMimeType ('application/json ' );
129
+ $ this ->assertEquals ('application/json ' , $ config ->getOutputMimeType ());
130
+
131
+ // Test output schema
132
+ $ outputSchema = [
133
+ 'type ' => 'object ' ,
134
+ 'properties ' => [
135
+ 'result ' => ['type ' => 'string ' ]
136
+ ]
137
+ ];
138
+ $ config ->setOutputSchema ($ outputSchema );
139
+ $ this ->assertEquals ($ outputSchema , $ config ->getOutputSchema ());
140
+
125
141
// Test custom options
126
142
$ customOptions = ['custom_param ' => 'value ' , 'another_param ' => 123 ];
127
143
$ config ->setCustomOptions ($ customOptions );
@@ -146,7 +162,8 @@ public function testGetJsonSchema(): void
146
162
$ expectedProperties = [
147
163
ModelConfig::KEY_OUTPUT_MODALITIES , ModelConfig::KEY_SYSTEM_INSTRUCTION , ModelConfig::KEY_CANDIDATE_COUNT , ModelConfig::KEY_MAX_TOKENS ,
148
164
ModelConfig::KEY_TEMPERATURE , ModelConfig::KEY_TOP_P , ModelConfig::KEY_TOP_K , ModelConfig::KEY_STOP_SEQUENCES , ModelConfig::KEY_PRESENCE_PENALTY ,
149
- ModelConfig::KEY_FREQUENCY_PENALTY , ModelConfig::KEY_LOGPROBS , ModelConfig::KEY_TOP_LOGPROBS , ModelConfig::KEY_TOOLS , ModelConfig::KEY_CUSTOM_OPTIONS
165
+ ModelConfig::KEY_FREQUENCY_PENALTY , ModelConfig::KEY_LOGPROBS , ModelConfig::KEY_TOP_LOGPROBS , ModelConfig::KEY_TOOLS ,
166
+ ModelConfig::KEY_OUTPUT_MIME_TYPE , ModelConfig::KEY_OUTPUT_SCHEMA , ModelConfig::KEY_CUSTOM_OPTIONS
150
167
];
151
168
152
169
foreach ($ expectedProperties as $ property ) {
@@ -159,6 +176,8 @@ public function testGetJsonSchema(): void
159
176
$ this ->assertEquals ('integer ' , $ schema ['properties ' ][ModelConfig::KEY_CANDIDATE_COUNT ]['type ' ]);
160
177
$ this ->assertEquals ('number ' , $ schema ['properties ' ][ModelConfig::KEY_TEMPERATURE ]['type ' ]);
161
178
$ this ->assertEquals ('boolean ' , $ schema ['properties ' ][ModelConfig::KEY_LOGPROBS ]['type ' ]);
179
+ $ this ->assertEquals ('string ' , $ schema ['properties ' ][ModelConfig::KEY_OUTPUT_MIME_TYPE ]['type ' ]);
180
+ $ this ->assertEquals ('object ' , $ schema ['properties ' ][ModelConfig::KEY_OUTPUT_SCHEMA ]['type ' ]);
162
181
$ this ->assertEquals ('object ' , $ schema ['properties ' ][ModelConfig::KEY_CUSTOM_OPTIONS ]['type ' ]);
163
182
164
183
// Check constraints
@@ -192,6 +211,8 @@ public function testToArrayAllProperties(): void
192
211
$ config ->setLogprobs (true );
193
212
$ config ->setTopLogprobs (10 );
194
213
$ config ->setTools ([$ tool ]);
214
+ $ config ->setOutputMimeType ('application/json ' );
215
+ $ config ->setOutputSchema (['type ' => 'object ' ]);
195
216
$ config ->setCustomOptions (['key ' => 'value ' ]);
196
217
197
218
$ array = $ config ->toArray ();
@@ -210,6 +231,8 @@ public function testToArrayAllProperties(): void
210
231
$ this ->assertTrue ($ array [ModelConfig::KEY_LOGPROBS ]);
211
232
$ this ->assertEquals (10 , $ array [ModelConfig::KEY_TOP_LOGPROBS ]);
212
233
$ this ->assertCount (1 , $ array [ModelConfig::KEY_TOOLS ]);
234
+ $ this ->assertEquals ('application/json ' , $ array [ModelConfig::KEY_OUTPUT_MIME_TYPE ]);
235
+ $ this ->assertEquals (['type ' => 'object ' ], $ array [ModelConfig::KEY_OUTPUT_SCHEMA ]);
213
236
$ this ->assertEquals (['key ' => 'value ' ], $ array [ModelConfig::KEY_CUSTOM_OPTIONS ]);
214
237
}
215
238
@@ -283,6 +306,8 @@ public function testFromArrayAllProperties(): void
283
306
]
284
307
]
285
308
],
309
+ ModelConfig::KEY_OUTPUT_MIME_TYPE => 'application/json ' ,
310
+ ModelConfig::KEY_OUTPUT_SCHEMA => ['type ' => 'array ' , 'items ' => ['type ' => 'string ' ]],
286
311
ModelConfig::KEY_CUSTOM_OPTIONS => ['custom ' => true ]
287
312
];
288
313
@@ -304,6 +329,8 @@ public function testFromArrayAllProperties(): void
304
329
$ this ->assertFalse ($ config ->getLogprobs ());
305
330
$ this ->assertEquals (3 , $ config ->getTopLogprobs ());
306
331
$ this ->assertCount (1 , $ config ->getTools ());
332
+ $ this ->assertEquals ('application/json ' , $ config ->getOutputMimeType ());
333
+ $ this ->assertEquals (['type ' => 'array ' , 'items ' => ['type ' => 'string ' ]], $ config ->getOutputSchema ());
307
334
$ this ->assertEquals (['custom ' => true ], $ config ->getCustomOptions ());
308
335
}
309
336
@@ -482,6 +509,33 @@ public function testImplementsCorrectInterfaces(): void
482
509
);
483
510
}
484
511
512
+ /**
513
+ * Tests automatic output MIME type setting when schema is provided.
514
+ *
515
+ * @return void
516
+ */
517
+ public function testOutputSchemaAutomaticallySetsJsonMimeType (): void
518
+ {
519
+ $ config = new ModelConfig ();
520
+
521
+ // Test that setting output schema automatically sets MIME type to application/json
522
+ $ this ->assertNull ($ config ->getOutputMimeType ());
523
+
524
+ $ schema = ['type ' => 'object ' , 'properties ' => ['test ' => ['type ' => 'string ' ]]];
525
+ $ config ->setOutputSchema ($ schema );
526
+
527
+ $ this ->assertEquals ('application/json ' , $ config ->getOutputMimeType ());
528
+ $ this ->assertEquals ($ schema , $ config ->getOutputSchema ());
529
+
530
+ // Test that explicitly set MIME type is not overridden
531
+ $ config2 = new ModelConfig ();
532
+ $ config2 ->setOutputMimeType ('text/plain ' );
533
+ $ config2 ->setOutputSchema ($ schema );
534
+
535
+ $ this ->assertEquals ('text/plain ' , $ config2 ->getOutputMimeType ());
536
+ $ this ->assertEquals ($ schema , $ config2 ->getOutputSchema ());
537
+ }
538
+
485
539
/**
486
540
* Tests setCustomOption method.
487
541
*
0 commit comments