
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
chat GPT를 넣어보고 있는데 API 연결이 안돼서요.
class DreamInputPage extends StatefulWidget {
final String selectedConstellation;
DreamInputPage({Key? key, required this.selectedConstellation})
: super(key: key);
@override
_DreamInputPageState createState() => _DreamInputPageState();
}
class _DreamInputPageState extends State<DreamInputPage> {
final TextEditingController messageController = TextEditingController();
List<Map<String, String>> messages = []; // 메시지를 객체 형태로 저장하는 리스트
@override
void initState() {
super.initState();
// 초기 서버 메시지 추가
messages.add({
"role": "system",
"content":
"안녕하세요! 별자리 운세에 기반한 꿈 해몽을 확인하실 수 있습니다. 어떤 꿈을 꾸셨나요? (로딩이 10~20초 정도 걸릴 수 있습니다.)"
});
}
Future<void> getFortune(String myConstellation, List<String> userMessages,
List<String> assistantMessages) async {
String todayDateTime =
DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now()); // 현재 날짜와 시간
List<Map<String, String>> messages = [
{
"role": "system",
"content":
"."
},
{
"role": "user",
"content":
"."
},
{
"role": "assistant",
"content":
""
},
{
"role": "user",
"content": "."
},
{
"role": "assistant",
"content":
"."
},
];
userMessages.forEach((message) {
messages.add({"role": "user", "content": message});
});
assistantMessages.forEach((message) {
messages.add({"role": "assistant", "content": message});
});
var response = await http.post(
Uri.parse(
'https://api.openai.com/v1/engines/davinci-codex/completions'),
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer ${dotenv.env['token']}"
},
body: json.encode({"model": "gpt-3.5-turbo", "messages": messages}));
if (response.statusCode == 200) {
var data = jsonDecode(response.body);
print(data['choices'][0]['message']['content']); // 결과 처리
} else {
// 에러 처리
print('Failed to call OpenAI API');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('꿈 입력하기'),
),
body: Column(
children: <Widget>[
Expanded(
child: ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) {
bool isUserMessage = messages[index]["role"] == "user";
return Padding(
padding: EdgeInsets.symmetric(vertical: 4, horizontal: 8),
child: Align(
alignment: isUserMessage
? Alignment.centerRight
: Alignment.centerLeft,
child: Container(
padding:
EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: isUserMessage
? Colors.lightBlue[100]
: Colors.grey[300],
borderRadius: BorderRadius.circular(20),
),
child: Text(
messages[index]["content"]!), // 올바르게 'content' 키 사용
),
),
);
},
),
),
Padding(
padding: EdgeInsets.all(8.0),
child: Row(
children: <Widget>[
Expanded(
child: TextFormField(
controller: messageController,
decoration: InputDecoration(
hintText: '오늘 어떤 꿈을 꾸셨나요?',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15),
),
),
),
),
IconButton(
icon: Icon(Icons.send),
onPressed: () async {
if (messageController.text.isNotEmpty) {
// 사용자 메시지를 메시지 리스트에 추가
setState(() {
messages.add({
"role": "user",
"content": messageController.text
});
});
// getFortune 함수 호출
await getFortune(widget.selectedConstellation,
[messageController.text], []);
// 텍스트 필드 초기화
messageController.clear();
}
},
),
],
),
),
],
),
);
}
}
api call fail 이라고 나오는데 이유를 모르겠습니다. 혹시라도 알려주시면 감사하겠습니다.
