data_source_analyzer 0.0.1 copy "data_source_analyzer: ^0.0.1" to clipboard
data_source_analyzer: ^0.0.1 copied to clipboard

Bindings for Tranformer.js library

example/lib/main.dart

// ignore_for_file: use_build_context_synchronously
import 'package:data_source_analyzer/data_source_analyzer.dart';
import 'package:data_source_analyzer/models/remote_hosting_settings.dart';
import 'package:data_source_analyzer/services/lib_init_service.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  initDataSourceAnalyzerLib();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
        appBarTheme: AppBarTheme(
          backgroundColor: Theme.of(context).colorScheme.primary,
          foregroundColor: Theme.of(context).colorScheme.onPrimary,
          surfaceTintColor: Colors.transparent,
          elevation: 0,
        ),
      ),
      home: const HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({super.key});

  @override
  Widget build(BuildContext context) {
    final dataSourseAnalyzer = DataSourseAnalyzer.defaultInstance();
    return Scaffold(
      appBar: AppBar(
        title: const Text('Home'),
        centerTitle: true,
      ),
      body: SingleChildScrollView(
        child: SizedBox(
          width: double.infinity,
          child: Column(
            children: [
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 20),
                child: AiRequestBlock(
                  title: "Text classification",
                  dataSourseAnalyzer: dataSourseAnalyzer,
                  type: "text-classification",
                  model:
                      "Xenova/distilbert-base-uncased-finetuned-sst-2-english",
                  additionalPipelineParams:
                      "{progress_callback: (p) => console.log(JSON.stringify(p)),}",
                  request:
                      "Top SELLING! 300% profit !!! only 50\$ for consultation",
                  additionalModelParams: "{topk:null,}",
                  remoteHost: 'https://bf73-188-190-37-83.ngrok-free.app',
                  remotePathTemplate: '/models/{model}',
                ),
              ),
              const SizedBox(height: 20),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 20),
                child: AiRequestBlock(
                  title: "Text generation",
                  dataSourseAnalyzer: dataSourseAnalyzer,
                  type: "text-generation",
                  model: "Xenova/distilgpt2",
                  additionalPipelineParams:
                      "{progress_callback: (p) => console.log(JSON.stringify(p)),}",
                  request: "I enjoy walking with my cute dog,",
                  additionalModelParams: "{}",
                  remoteHost: 'https://huggingface.co/',
                  remotePathTemplate: '{model}/resolve/{revision}/',
                ),
              ),
              const SizedBox(height: 20),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 20),
                child: AiRequestBlock(
                  title: "Translation",
                  dataSourseAnalyzer: dataSourseAnalyzer,
                  type: "translation",
                  model: "Xenova/opus-mt-en-uk",
                  additionalPipelineParams:
                      "{progress_callback: (p) => console.log(JSON.stringify(p)),}",
                  request: "I enjoy walking with my cute dog",
                  additionalModelParams: """{src_lang: 'en', tgt_lang: 'uk'}""",
                  remoteHost: 'https://huggingface.co/',
                  remotePathTemplate: '{model}/resolve/{revision}/',
                ),
              ),
              const SizedBox(height: 20),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 20),
                child: AiRequestBlock(
                  title: "Automatic speech recognition",
                  dataSourseAnalyzer: dataSourseAnalyzer,
                  type: "automatic-speech-recognition",
                  model: "Xenova/whisper-tiny.en",
                  additionalPipelineParams:
                      "{progress_callback: (p) => console.log(JSON.stringify(p)),}",
                  request:
                      "https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/jfk.wav",
                  additionalModelParams: "{}",
                  remoteHost: 'https://huggingface.co/',
                  remotePathTemplate: '{model}/resolve/{revision}/',
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class AiRequestBlock extends StatefulWidget {
  const AiRequestBlock({
    super.key,
    required this.title,
    required this.dataSourseAnalyzer,
    required this.type,
    required this.model,
    required this.additionalPipelineParams,
    required this.request,
    required this.additionalModelParams,
    required this.remoteHost,
    required this.remotePathTemplate,
  });
  final String title;
  final DataSourseAnalyzer dataSourseAnalyzer;
  final String type;
  final String model;
  final String additionalPipelineParams;
  final String request;
  final String additionalModelParams;
  final String remoteHost;
  final String remotePathTemplate;

  @override
  State<AiRequestBlock> createState() => _AiRequestBlockState();
}

class _AiRequestBlockState extends State<AiRequestBlock> {
  DataSourseAnalyzer get dataSourseAnalyzer => widget.dataSourseAnalyzer;

  final _formKey = GlobalKey<FormState>();

  final Map<String, dynamic> requestParams = {};

  bool loading = false;

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      width: double.infinity,
      child: Form(
        key: _formKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            const SizedBox(height: 10),
            Text(widget.title, style: const TextStyle(fontSize: 20)),
            const SizedBox(height: 10),
            TextFormField(
              initialValue: widget.type,
              decoration: inputDecoration('Request type'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Please enter request type';
                }
                return null;
              },
              onSaved: (newValue) {
                requestParams["type"] = newValue!;
              },
            ),
            const SizedBox(height: 15),
            TextFormField(
                initialValue: widget.model,
                decoration: inputDecoration('Model'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter model';
                  }
                  return null;
                },
                onSaved: (newValue) {
                  requestParams["model"] = newValue!;
                }),
            const SizedBox(height: 15),
            TextFormField(
                initialValue: widget.additionalPipelineParams,
                decoration: inputDecoration('Additional pipeline params'),
                minLines: 1,
                maxLines: 10,
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter additional pipeline params';
                  }
                  return null;
                },
                onSaved: (newValue) {
                  requestParams["additionalPipelineParams"] = newValue!;
                }),
            const SizedBox(height: 15),
            TextFormField(
              initialValue: widget.request,
              decoration: inputDecoration('Request'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Please enter request';
                }
                return null;
              },
              onSaved: (newValue) {
                requestParams["request"] = newValue!;
              },
            ),
            const SizedBox(height: 15),
            TextFormField(
              initialValue: widget.additionalModelParams,
              decoration: inputDecoration('Additional model params'),
              minLines: 1,
              maxLines: 10,
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Please enter additional model params';
                }
                return null;
              },
              onSaved: (newValue) {
                requestParams["additionalModelParams"] = newValue!;
              },
            ),
            const SizedBox(height: 15),
            TextFormField(
              initialValue: widget.remoteHost,
              decoration: inputDecoration('Remote host'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Please enter remote host';
                }
                return null;
              },
              onSaved: (newValue) {
                requestParams["remoteHost"] = newValue!;
              },
            ),
            const SizedBox(height: 15),
            TextFormField(
                initialValue: widget.remotePathTemplate,
                decoration: inputDecoration('Remote path template'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter remote path template';
                  }
                  return null;
                },
                onSaved: (newValue) {
                  requestParams["remotePathTemplate"] = newValue!;
                }),
            const SizedBox(height: 15),
            if (!loading)
              ElevatedButton(
                onPressed: () async {
                  setState(() {
                    loading = true;
                  });
                  if (_formKey.currentState!.validate()) {
                    _formKey.currentState!.save();
                    try {
                      final output = await dataSourseAnalyzer.callAiModel(
                          model: requestParams["model"],
                          type: requestParams["type"],
                          additionalPipelineParams:
                              requestParams["additionalPipelineParams"],
                          request: requestParams["request"],
                          additionalModelParams:
                              requestParams["additionalModelParams"],
                          remoteHostSettings: RemoteHostSettings(
                            remoteHost: requestParams["remoteHost"],
                            remotePathTemplate:
                                requestParams["remotePathTemplate"],
                          ));
                      showDialog(
                        context: context,
                        builder: (context) {
                          return AlertDialog(
                            title: const Text(
                              "Output",
                              style: TextStyle(fontSize: 20),
                            ),
                            content: SelectableText(output),
                          );
                        },
                      );
                    } catch (err) {
                      showDialog(
                        context: context,
                        builder: (context) {
                          return AlertDialog(
                            title: const Text("Error"),
                            content: Text(err.toString()),
                          );
                        },
                      );
                    }
                    setState(() {
                      loading = false;
                    });
                  }
                },
                child: const Text("Generate ai request"),
              )
            else
              const CircularProgressIndicator(),
          ],
        ),
      ),
    );
  }

  InputDecoration inputDecoration(String labelText) {
    return InputDecoration(
      floatingLabelBehavior: FloatingLabelBehavior.always,
      border: const OutlineInputBorder(),
      labelText: labelText,
      labelStyle: const TextStyle(fontSize: 20),
    );
  }
}
0
likes
130
points
23
downloads

Publisher

unverified uploader

Weekly Downloads

Bindings for Tranformer.js library

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_inappwebview

More

Packages that depend on data_source_analyzer