build method

  1. @override
dynamic build(
  1. 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)),
        ),
      ],
    ),
  );
}