Spaces:
Configuration error
Configuration error
| import 'dart:async'; | |
| import 'dart:math'; | |
| import 'package:chat_gpt_sdk/chat_gpt_sdk.dart'; | |
| import 'package:example/constants.dart'; | |
| import 'package:flutter/material.dart'; | |
| import 'package:material_buttonx/materialButtonX.dart'; | |
| void main() => runApp(const MyApp()); | |
| class MyApp extends StatelessWidget { | |
| const MyApp({super.key}); | |
| Widget build(BuildContext context) { | |
| return const MaterialApp( | |
| home: TranslateScreen(), | |
| ); | |
| } | |
| } | |
| class TranslateScreen extends StatefulWidget { | |
| const TranslateScreen({super.key}); | |
| State<TranslateScreen> createState() => _TranslateScreenState(); | |
| } | |
| class _TranslateScreenState extends State<TranslateScreen> { | |
| /// text controller | |
| final _txtWord = TextEditingController(); | |
| late OpenAI openAI; | |
| Future<CompleteResponse?>? _translateFuture; | |
| void _translateEngToThai() async { | |
| final request = CompleteText( | |
| prompt: translateEngToThai(word: _txtWord.text.toString()), | |
| maxTokens: 200, | |
| model: Gpt3TurboInstruct()); | |
| setState(() { | |
| _translateFuture = openAI.onCompletion(request: request); | |
| }); | |
| } | |
| ///parameter name is require | |
| void gptFunctionCalling() async { | |
| final request = ChatCompleteText( | |
| messages: [ | |
| Messages( | |
| role: Role.user, | |
| content: "What is the weather like in Boston?", | |
| name: "get_current_weather") | |
| .toJson(), | |
| ], | |
| maxToken: 200, | |
| model: Gpt41106PreviewChatModel(), | |
| tools: [ | |
| { | |
| "type": "function", | |
| "function": { | |
| "name": "get_current_weather", | |
| "description": "Get the current weather in a given location", | |
| "parameters": { | |
| "type": "object", | |
| "properties": { | |
| "location": { | |
| "type": "string", | |
| "description": "The city and state, e.g. San Francisco, CA" | |
| }, | |
| "unit": { | |
| "type": "string", | |
| "enum": ["celsius", "fahrenheit"] | |
| } | |
| }, | |
| "required": ["location"] | |
| } | |
| } | |
| } | |
| ], | |
| toolChoice: 'auto', | |
| ); | |
| ChatCTResponse? response = await openAI.onChatCompletion(request: request); | |
| debugPrint("$response"); | |
| } | |
| void imageInput() async { | |
| final request = ChatCompleteText( | |
| messages: [ | |
| { | |
| "role": "user", | |
| "content": [ | |
| {"type": "text", "text": "What’s in this image?"}, | |
| { | |
| "type": "image_url", | |
| "image_url": { | |
| "url": | |
| "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg" | |
| } | |
| } | |
| ] | |
| } | |
| ], | |
| maxToken: 200, | |
| model: Gpt4VisionPreviewChatModel(), | |
| ); | |
| ChatCTResponse? response = await openAI.onChatCompletion(request: request); | |
| debugPrint("$response"); | |
| } | |
| void gpt4() async { | |
| final request = ChatCompleteText(messages: [ | |
| Messages(role: Role.assistant, content: 'Hello!').toJson(), | |
| ], maxToken: 200, model: Gpt4ChatModel()); | |
| await openAI.onChatCompletion(request: request); | |
| } | |
| void initState() { | |
| openAI = OpenAI.instance.build( | |
| token: kToken, | |
| baseOption: HttpSetup( | |
| receiveTimeout: const Duration(seconds: 20), | |
| connectTimeout: const Duration(seconds: 20)), | |
| enableLog: true); | |
| super.initState(); | |
| } | |
| Widget build(BuildContext context) { | |
| var size = MediaQuery.of(context).size; | |
| return Scaffold( | |
| backgroundColor: Colors.white, | |
| body: SingleChildScrollView( | |
| child: Center( | |
| child: Padding( | |
| padding: const EdgeInsets.symmetric(vertical: 16.0), | |
| child: Column( | |
| crossAxisAlignment: CrossAxisAlignment.center, | |
| children: [ | |
| /** | |
| * title translate | |
| */ | |
| _titleCard(size), | |
| /** | |
| * input card | |
| * insert your text for translate to th.com | |
| */ | |
| _inputCard(size), | |
| /** | |
| * card input translate | |
| */ | |
| _resultCard(size), | |
| /** | |
| * button translate | |
| */ | |
| _btnTranslate() | |
| ], | |
| ), | |
| ), | |
| ), | |
| ), | |
| bottomNavigationBar: _navigation(size), | |
| ); | |
| } | |
| Widget _btnTranslate() { | |
| return Row( | |
| mainAxisAlignment: MainAxisAlignment.end, | |
| children: [ | |
| Padding( | |
| padding: const EdgeInsets.only(right: 16.0), | |
| child: MaterialButtonX( | |
| message: "Translate", | |
| height: 40.0, | |
| width: 130.0, | |
| color: Colors.blueAccent, | |
| icon: Icons.translate, | |
| iconSize: 18.0, | |
| radius: 46.0, | |
| onClick: _translateEngToThai, | |
| ), | |
| ), | |
| ], | |
| ); | |
| } | |
| Widget _resultCard(Size size) { | |
| return FutureBuilder<CompleteResponse?>( | |
| future: _translateFuture, | |
| builder: (context, snapshot) { | |
| final text = snapshot.data?.choices.last.text; | |
| return Container( | |
| margin: const EdgeInsets.symmetric(vertical: 32.0), | |
| padding: const EdgeInsets.symmetric(horizontal: 16.0), | |
| alignment: Alignment.bottomCenter, | |
| width: size.width * .86, | |
| height: size.height * .3, | |
| decoration: heroCard, | |
| child: SingleChildScrollView( | |
| child: Column( | |
| children: [ | |
| Text( | |
| text ?? 'Loading...', | |
| style: const TextStyle(color: Colors.black, fontSize: 18.0), | |
| ), | |
| SizedBox( | |
| width: size.width, | |
| child: const Divider( | |
| color: Colors.grey, | |
| thickness: 1, | |
| ), | |
| ), | |
| const Padding( | |
| padding: EdgeInsets.all(12.0), | |
| child: Row( | |
| mainAxisAlignment: MainAxisAlignment.end, | |
| children: [ | |
| Icon( | |
| Icons.copy_outlined, | |
| color: Colors.grey, | |
| size: 22.0, | |
| ), | |
| Padding( | |
| padding: EdgeInsets.symmetric(horizontal: 8.0), | |
| child: Icon( | |
| Icons.delete_forever, | |
| color: Colors.grey, | |
| size: 22.0, | |
| ), | |
| ) | |
| ], | |
| ), | |
| ) | |
| ], | |
| ), | |
| ), | |
| ); | |
| }); | |
| } | |
| Padding _navigation(Size size) { | |
| return Padding( | |
| padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 18.0), | |
| child: Container( | |
| width: size.width * .8, | |
| height: size.height * .06, | |
| decoration: heroNav, | |
| child: Row( | |
| mainAxisAlignment: MainAxisAlignment.spaceAround, | |
| children: [ | |
| Container( | |
| padding: const EdgeInsets.all(4.0), | |
| decoration: BoxDecoration( | |
| color: Colors.indigoAccent, | |
| borderRadius: BorderRadius.circular(50.0)), | |
| child: const Icon( | |
| Icons.translate, | |
| color: Colors.white, | |
| size: 22.0, | |
| ), | |
| ), | |
| const Icon( | |
| Icons.record_voice_over_outlined, | |
| color: Colors.indigoAccent, | |
| size: 22.0, | |
| ), | |
| const Icon( | |
| Icons.favorite, | |
| color: Colors.indigoAccent, | |
| size: 22.0, | |
| ), | |
| const Icon( | |
| Icons.person, | |
| color: Colors.indigoAccent, | |
| size: 22.0, | |
| ) | |
| ], | |
| ), | |
| ), | |
| ); | |
| } | |
| Widget _titleCard(Size size) { | |
| return Container( | |
| margin: const EdgeInsets.symmetric(vertical: 32.0), | |
| width: size.width * .86, | |
| height: size.height * .08, | |
| decoration: heroCard, | |
| child: Row( | |
| mainAxisAlignment: MainAxisAlignment.spaceAround, | |
| children: [ | |
| Row( | |
| children: [ | |
| ClipRRect( | |
| borderRadius: BorderRadius.circular(30), | |
| child: Image.network( | |
| "https://www.clipartmax.com/png/middle/200-2009207_francais-english-italiano-english-flag-icon-flat.png", | |
| fit: BoxFit.cover, | |
| width: 30.0, | |
| height: 30.0, | |
| ), | |
| ), | |
| const Padding( | |
| padding: EdgeInsets.symmetric(horizontal: 4.0), | |
| child: Text( | |
| "Eng", | |
| style: TextStyle(color: Colors.grey, fontSize: 12.0), | |
| ), | |
| ), | |
| Transform.rotate( | |
| angle: -pi / 2, | |
| child: const Icon( | |
| Icons.arrow_back_ios_new, | |
| size: 16.0, | |
| color: Colors.grey, | |
| ), | |
| ) | |
| ], | |
| ), | |
| const Padding( | |
| padding: EdgeInsets.symmetric(horizontal: 12.0), | |
| child: Icon( | |
| Icons.swap_horiz_outlined, | |
| color: Colors.grey, | |
| size: 22.0, | |
| ), | |
| ), | |
| Row( | |
| children: [ | |
| ClipRRect( | |
| borderRadius: BorderRadius.circular(30), | |
| child: Image.network( | |
| "https://cdn-icons-png.flaticon.com/512/197/197452.png", | |
| fit: BoxFit.cover, | |
| width: 30.0, | |
| height: 30.0, | |
| ), | |
| ), | |
| const Padding( | |
| padding: EdgeInsets.symmetric(horizontal: 4.0), | |
| child: Text( | |
| "Thai", | |
| style: TextStyle(color: Colors.grey, fontSize: 12.0), | |
| ), | |
| ), | |
| Transform.rotate( | |
| angle: -pi / 2, | |
| child: const Icon( | |
| Icons.arrow_back_ios_new, | |
| size: 16.0, | |
| color: Colors.grey, | |
| ), | |
| ) | |
| ], | |
| ) | |
| ], | |
| ), | |
| ); | |
| } | |
| Widget _inputCard(Size size) { | |
| return Container( | |
| padding: const EdgeInsets.symmetric(horizontal: 16.0), | |
| alignment: Alignment.bottomCenter, | |
| width: size.width * .86, | |
| height: size.height * .25, | |
| decoration: heroCard, | |
| child: SingleChildScrollView( | |
| child: Column( | |
| children: [ | |
| TextField( | |
| decoration: const InputDecoration( | |
| border: InputBorder.none, | |
| enabledBorder: InputBorder.none, | |
| disabledBorder: InputBorder.none), | |
| controller: _txtWord, | |
| maxLines: 6, | |
| textInputAction: TextInputAction.newline, | |
| keyboardType: TextInputType.multiline, | |
| ), | |
| SizedBox( | |
| width: size.width, | |
| child: const Divider( | |
| color: Colors.grey, | |
| thickness: 1, | |
| ), | |
| ), | |
| const Padding( | |
| padding: EdgeInsets.all(12.0), | |
| child: Row( | |
| mainAxisAlignment: MainAxisAlignment.end, | |
| children: [ | |
| Icon( | |
| Icons.copy_outlined, | |
| color: Colors.grey, | |
| size: 22.0, | |
| ), | |
| Padding( | |
| padding: EdgeInsets.symmetric(horizontal: 8.0), | |
| child: Icon( | |
| Icons.record_voice_over_outlined, | |
| color: Colors.grey, | |
| size: 22.0, | |
| ), | |
| ) | |
| ], | |
| ), | |
| ) | |
| ], | |
| ), | |
| ), | |
| ); | |
| } | |
| } |