11<script >
22 import Select from ' $lib/common/dropdowns/Select.svelte' ;
33 import { INTEGER_REGEX } from ' $lib/helpers/constants' ;
4- import { ReasoningEffortLevel } from ' $lib/helpers/enums' ;
4+ import { ReasoningEffortLevel , ResponseFormat } from ' $lib/helpers/enums' ;
55
66 /**
77 * @type {{
1111 * selectedModel?: string | null,
1212 * selectedReasoningEffortLevel?: string | null,
1313 * selectedMaxOutputTokens?: number | null,
14- * onSelectLlm?: (detail: { provider: import('$commonTypes').LlmConfig | null, model: string | null, reasoning_effort_level: string | null, max_output_tokens: number | null }) => void
14+ * selectedResponseFormat?: string | null,
15+ * onSelectLlm?: (detail: { provider: import('$commonTypes').LlmConfig | null, model: string | null, reasoning_effort_level: string | null, max_output_tokens: number | null, response_format: string | null }) => void
1516 * }}
1617 */
1718 let {
2122 selectedModel = $bindable (null ),
2223 selectedReasoningEffortLevel = $bindable (null ),
2324 selectedMaxOutputTokens = $bindable (null ),
25+ selectedResponseFormat = $bindable (null ),
2426 onSelectLlm
2527 } = $props ();
2628
3032 label: v
3133 }));
3234
35+ /** @type {import('$commonTypes').LabelValuePair[]} */
36+ const responseFormatOptions = Object .values (ResponseFormat).map (v => ({
37+ value: v,
38+ label: v
39+ }));
40+
3341 /** @type {import('$commonTypes').LabelValuePair[]} */
3442 let providerOptions = $derived (
3543 llmConfigs? .map (x => ({
99107 fireSelectLlm ();
100108 }
101109
110+ /** @param {any} e */
111+ function selectResponseFormat (e ) {
112+ // @ts-ignore
113+ const selectedValues = e .detail .selecteds ? .map (x => x .value ) || [];
114+ selectedResponseFormat = selectedValues .length > 0 ? selectedValues[0 ] : null ;
115+ fireSelectLlm ();
116+ }
117+
102118 /** @param {any} e */
103119 function validateIntegerInput (e ) {
104120 const reg = new RegExp (INTEGER_REGEX , ' g' );
112128 provider: selectedProvider || null ,
113129 model: selectedModel,
114130 reasoning_effort_level: selectedReasoningEffortLevel || null ,
115- max_output_tokens: selectedMaxOutputTokens || null
131+ max_output_tokens: selectedMaxOutputTokens || null ,
132+ response_format: selectedResponseFormat || null
116133 });
117134 }
118135< / script>
183200 / >
184201 < / div>
185202 {/ if }
203+
204+ < div>
205+ < label for = " response-format-select" class = " mb-1.5 inline-flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-primary" >
206+ < i class = " mdi mdi-code-json text-sm leading-none" >< / i>
207+ Response format
208+ < / label>
209+ < Select
210+ tag= {' response-format-select' }
211+ placeholder= {' Select a format' }
212+ disabled= {disabled}
213+ selectedValues= {selectedResponseFormat ? [selectedResponseFormat] : []}
214+ options= {responseFormatOptions}
215+ onselect= {e => selectResponseFormat (e)}
216+ / >
217+ < / div>
186218< / div>
0 commit comments