Skip to content

Commit

Permalink
feat: generate food recomendation
Browse files Browse the repository at this point in the history
  • Loading branch information
amrron committed Oct 29, 2024
1 parent 085c91f commit 06851ed
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 16 deletions.
62 changes: 48 additions & 14 deletions app/Http/Controllers/FoodController.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public function create(GenerateFoodRequest $request) {
$food->garam = $data['garam'];
$food->gula = $data['gula'];


if (!$foodExist) {
$food->save();
}
Expand Down Expand Up @@ -109,15 +109,6 @@ public function generate(GenerateFoodRequest $request) {

$user = auth()->user();

// if (!$user->langganan) {
// return response()->json([
// 'success' => false,
// 'status' => 'error',
// 'error' => 'Gagal membuat data makanan',
// 'message' => 'Fitur ini khusus pengguna premium'
// ], 401);
// }

$validatedRequest = $request->validated();

$compilation = $this->aIgenerate($request->makanan);
Expand All @@ -142,24 +133,67 @@ public function generate(GenerateFoodRequest $request) {
}

private function aIgenerate($makanan) {
$compilation = OpenAI::chat()->create([
$compilation = openai::chat()->create([
'model' => 'gpt-3.5-turbo',
'messages' => [
[
'role' => 'system',
'content' => "Kamu akan menyediakan data kandungan makanan berdasarkan nama makanan yang diberikan. Detail makanan juga diberikan untuk mendapatkan kandungan makanan yang lebih akurat. Kandungan makanan tersebut meliputi karbohidrat, protein, garam, gula, lemak, dan deskripsi kurang dari 20 kata. Deskripsi tersebut harus umum dan tidak menyebutkan detail lauk atau bahan. Hasilkan dalam format JSON seperti: {'nama': 'nama makanan', 'karbohidrat': 20, 'protein': 9, 'lemak': 14, 'gula': 8, 'garam': 3, 'deskripsi': 'deskripsi dari makanan'}."
'content' => "kamu akan menyediakan data kandungan makanan berdasarkan nama makanan yang diberikan. detail makanan juga diberikan untuk mendapatkan kandungan makanan yang lebih akurat. kandungan makanan tersebut meliputi karbohidrat, protein, garam, gula, lemak, dan deskripsi kurang dari 20 kata. deskripsi tersebut harus umum dan tidak menyebutkan detail lauk atau bahan. hasilkan dalam format json seperti: {'nama': 'nama makanan', 'karbohidrat': 20, 'protein': 9, 'lemak': 14, 'gula': 8, 'garam': 3, 'deskripsi': 'deskripsi dari makanan'}."
],
[
'role' => 'user',
'role' => 'user',
'content' => $makanan
]
],
'max_tokens' => 150,
'max_tokens' => 200,
'response_format' => [
'type' => 'json_object'
]
]);

return $compilation;
}

public function aIRecommendation() {
$user = auth()->user();
$kondisi_user = "Saya seorang $user->jenis_kelamin berusia $user->usia tahun dengan tinggi badan $user->tinggi_badan cm dan berat badan $user->berat_badan kg. Saya sudah mengkonsumsi makanan dengan total karbohidart $user->daily_karbohidrat g, protein $user->daily_protein g, lemak $user->daily_lemak g, garam $user->daily_garam g, dan gula $user->daily_gula g. Batas konsumsi kandungan nutris karbohidrat saya $user->batas_karbohidrat g, protein $user->batas_protein g, lemak $user->batas_lemak g, garam $user->batas_garam, dan gula $user->batas_gula g. Saya ingin mengetahui rekomendasi makanan yang sesuai dengan kondisi saya.";

$compilation = openai::chat()->create([
'model' => 'gpt-3.5-turbo',
'messages' => [
[
'role' => 'system',
'content' => "Kamu adalah seorang ahli dalam bidang gizi makanan. Kamu akan diberikan data dan kondisi seseorang. Berikan rekomendasi makanan yang sesuai dengan kondisi tersebut. Data makanan yang diberikan meliputi karbohidrat, protein, garam, gula, lemak, dan deskripsi kurang dari 30 kata. Deskripsi tersebut harus umum dan tidak menyebutkan detail lauk atau bahan. Hasilkan dalam format json seperti: {'nama': 'nama makanan', 'karbohidrat': 20, 'protein': 9, 'lemak': 14, 'gula': 8, 'garam': 3, 'deskripsi': 'deskripsi dari makanan'}."
],
[
'role' => 'user',
'content' => $kondisi_user
]
],
'max_tokens' => 200,
'response_format' => [
'type' => 'json_object'
]
]);

if (!count($compilation['choices'])) {
return response()->json([
'success' => false,
'status' => 'error',
'message' => 'Gagal membuat data makanan',
'error' => 'Kesalahan dalam menghasilkan data makanan'
], 501);
}

$data = json_decode($compilation['choices'][0]['message']['content'], true);

return response()->json([
'success' => true,
'status' => 'success',
'message' => 'Berhasil membuat data makanan',
'data' => $data
], 201);


}
}
5 changes: 3 additions & 2 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@

Route::controller(FoodController::class)->group(function(){
Route::get('/makanan', 'index');
Route::get('/makanan/rekomendasi', 'aiRecommendation');
Route::get('/makanan/{food}', 'show');
Route::post('/makanan/create', 'create');
Route::post('/makanan/generate', 'generate');
Expand All @@ -61,10 +62,10 @@
Route::post('/email-verification', 'verification');
Route::post('/resend-otp', 'resend_otp');
});

Route::controller(UserController::class)->group(function(){
Route::put('/user', 'update');
Route::get('/user', 'profile');
Route::get('/user', 'profile');
Route::post('/user/logout', 'logout');
});
});
Expand Down

0 comments on commit 06851ed

Please sign in to comment.