build method
dynamic
build( - dynamic context
)
Implementation
@override
Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context)!;
final s = controller.settings;
final local = controller.client.localAvailable;
return Padding(
padding: const EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
SegmentedButton<PlaygroundSourceKind>(
segments: <ButtonSegment<PlaygroundSourceKind>>[
ButtonSegment(
value: PlaygroundSourceKind.endpoint,
label: Text(l10n.aiSourceEndpoint),
),
ButtonSegment(
value: PlaygroundSourceKind.local,
label: Text(l10n.aiSourceLocal),
enabled: local,
),
],
selected: <PlaygroundSourceKind>{s.kind},
onSelectionChanged: (kinds) => _set(s.copyWith(kind: kinds.first)),
),
if (!local)
Text(
l10n.aiLocalUnavailable,
style: Theme.of(context).textTheme.bodySmall,
),
if (s.kind == PlaygroundSourceKind.local) ...<Widget>[
_field(
l10n.aiModelDir,
s.modelDir,
(v) => _set(s.copyWith(modelDir: v)),
),
DropdownButtonFormField<String>(
initialValue: s.provider,
decoration: InputDecoration(labelText: l10n.aiProvider),
items: const <DropdownMenuItem<String>>[
DropdownMenuItem(value: 'cpu', child: Text('CPU')),
DropdownMenuItem(value: 'cuda', child: Text('CUDA')),
DropdownMenuItem(value: 'dml', child: Text('DirectML')),
],
onChanged: (v) => _set(s.copyWith(provider: v)),
),
] else ...<Widget>[
_field(
l10n.aiBaseUrl,
s.baseUrl,
(v) => _set(s.copyWith(baseUrl: v.trim())),
),
_field(
l10n.aiModel,
s.model,
(v) => _set(s.copyWith(model: v.trim())),
),
_field(
l10n.aiApiKey,
s.apiKey,
(v) => _set(s.copyWith(apiKey: v)),
secret: true,
),
],
_field(
l10n.aiSystemPrompt,
s.systemPrompt,
(v) => _set(s.copyWith(systemPrompt: v)),
),
_field(
l10n.aiMaxTokens,
'${s.maxNewTokens}',
(v) => _set(
s.copyWith(maxNewTokens: int.tryParse(v) ?? s.maxNewTokens),
),
),
Text('${l10n.aiTemperature}: ${s.temperature.toStringAsFixed(2)}'),
Slider(
value: s.temperature,
max: 1.5,
divisions: 30,
onChanged: (v) => _set(s.copyWith(temperature: v)),
),
],
),
);
}