Syahhh01 commited on
Commit
a15a6db
·
verified ·
1 Parent(s): efd0305

Update genai_service.py

Browse files
Files changed (1) hide show
  1. genai_service.py +30 -53
genai_service.py CHANGED
@@ -2,6 +2,7 @@ import os
2
  from typing import Any
3
 
4
  from google import genai
 
5
  from pydantic import BaseModel, Field
6
 
7
 
@@ -9,7 +10,6 @@ from pydantic import BaseModel, Field
9
  # CONFIGURATION
10
  # ============================================================
11
 
12
- # Model dapat diganti melalui environment variable HF Space
13
  GEMINI_MODEL = os.getenv(
14
  "GEMINI_MODEL",
15
  "gemini-2.5-pro"
@@ -23,20 +23,21 @@ GEMINI_MODEL = os.getenv(
23
  class AIAnalysisResult(BaseModel):
24
  summary: str = Field(
25
  description=(
26
- "Ringkasan singkat hasil deteksi deepfake audio "
27
  "dalam Bahasa Indonesia."
28
  )
29
  )
30
 
31
  recommendation: list[str] = Field(
32
  description=(
33
- "Daftar tindakan lanjutan yang praktis dan relevan."
34
  )
35
  )
36
 
37
  disclaimer: str = Field(
38
  description=(
39
- "Peringatan bahwa hasil deteksi bukan bukti forensik final."
 
40
  )
41
  )
42
 
@@ -46,13 +47,6 @@ class AIAnalysisResult(BaseModel):
46
  # ============================================================
47
 
48
  def get_gemini_client() -> genai.Client:
49
- """
50
- Membuat Gemini client.
51
-
52
- API key dibaca otomatis dari environment variable:
53
- GEMINI_API_KEY
54
- """
55
-
56
  api_key = os.getenv(
57
  "GEMINI_API_KEY"
58
  )
@@ -68,17 +62,15 @@ def get_gemini_client() -> genai.Client:
68
 
69
 
70
  # ============================================================
71
- # GENERATE AI EXPLANATION
72
  # ============================================================
73
 
74
  def generate_detection_analysis(
75
  detection_result: dict[str, Any]
76
  ) -> dict[str, Any]:
77
  """
78
- Membuat penjelasan hasil deteksi menggunakan Gemini API.
79
-
80
  Gemini tidak menentukan label real atau fake.
81
- Gemini hanya menjelaskan output model TensorFlow.
82
  """
83
 
84
  client = get_gemini_client()
@@ -101,47 +93,35 @@ def generate_detection_analysis(
101
  Anda adalah AI Analysis Assistant untuk aplikasi pendeteksi
102
  deepfake audio.
103
 
104
- Buat penjelasan yang mudah dipahami oleh pengguna umum dalam
105
- Bahasa Indonesia.
 
 
106
 
107
- PENTING:
108
- - Jangan mengubah hasil klasifikasi dari model TensorFlow.
109
  - Jangan menyatakan hasil sebagai bukti forensik final.
110
  - Jangan membuat klaim berlebihan.
111
- - Berikan rekomendasi praktis.
112
- - Gunakan kalimat yang ringkas dan jelas.
113
-
114
- Berikut hasil deteksi dari model TensorFlow:
115
-
116
- prediction = {prediction}
117
- threshold = {threshold}
118
- total_clips = {total_clips}
119
- real_clips = {real_clips}
120
- fake_clips = {fake_clips}
121
- average_probability_real = {average_probability_real}
122
- average_probability_fake = {average_probability_fake}
123
-
124
- Buat:
125
- 1. Ringkasan hasil analisis.
126
- 2. Rekomendasi tindakan lanjutan.
127
- 3. Disclaimer bahwa hasil ini merupakan indikasi awal dan
128
- bukan bukti forensik final.
129
  """
130
 
131
  response = client.models.generate_content(
132
  model=GEMINI_MODEL,
133
  contents=prompt,
134
- config={
135
- "response_format": {
136
- "text": {
137
- "mime_type": "application/json",
138
- "schema": (
139
- AIAnalysisResult
140
- .model_json_schema()
141
- )
142
- }
143
- }
144
- }
145
  )
146
 
147
  if not response.text:
@@ -149,11 +129,8 @@ Buat:
149
  "Gemini API tidak mengembalikan respons."
150
  )
151
 
152
- parsed_result = (
153
- AIAnalysisResult
154
- .model_validate_json(
155
- response.text
156
- )
157
  )
158
 
159
  return parsed_result.model_dump()
 
2
  from typing import Any
3
 
4
  from google import genai
5
+ from google.genai import types
6
  from pydantic import BaseModel, Field
7
 
8
 
 
10
  # CONFIGURATION
11
  # ============================================================
12
 
 
13
  GEMINI_MODEL = os.getenv(
14
  "GEMINI_MODEL",
15
  "gemini-2.5-pro"
 
23
  class AIAnalysisResult(BaseModel):
24
  summary: str = Field(
25
  description=(
26
+ "Ringkasan hasil deteksi deepfake audio "
27
  "dalam Bahasa Indonesia."
28
  )
29
  )
30
 
31
  recommendation: list[str] = Field(
32
  description=(
33
+ "Daftar rekomendasi tindakan lanjutan."
34
  )
35
  )
36
 
37
  disclaimer: str = Field(
38
  description=(
39
+ "Peringatan bahwa hasil deteksi bukan "
40
+ "bukti forensik final."
41
  )
42
  )
43
 
 
47
  # ============================================================
48
 
49
  def get_gemini_client() -> genai.Client:
 
 
 
 
 
 
 
50
  api_key = os.getenv(
51
  "GEMINI_API_KEY"
52
  )
 
62
 
63
 
64
  # ============================================================
65
+ # GENERATE AI ANALYSIS
66
  # ============================================================
67
 
68
  def generate_detection_analysis(
69
  detection_result: dict[str, Any]
70
  ) -> dict[str, Any]:
71
  """
72
+ Gemini hanya menjelaskan hasil model TensorFlow.
 
73
  Gemini tidak menentukan label real atau fake.
 
74
  """
75
 
76
  client = get_gemini_client()
 
93
  Anda adalah AI Analysis Assistant untuk aplikasi pendeteksi
94
  deepfake audio.
95
 
96
+ Tugas Anda hanya menjelaskan hasil klasifikasi dari model
97
+ TensorFlow. Jangan mengubah hasil klasifikasi.
98
+
99
+ Gunakan Bahasa Indonesia yang mudah dipahami dan ringkas.
100
 
101
+ Aturan penting:
102
+ - Jangan mengubah label prediction.
103
  - Jangan menyatakan hasil sebagai bukti forensik final.
104
  - Jangan membuat klaim berlebihan.
105
+ - Berikan rekomendasi tindakan yang praktis.
106
+ - Jelaskan bahwa hasil bersifat indikasi awal.
107
+
108
+ Hasil deteksi model TensorFlow:
109
+ - prediction: {prediction}
110
+ - threshold: {threshold}
111
+ - total_clips: {total_clips}
112
+ - real_clips: {real_clips}
113
+ - fake_clips: {fake_clips}
114
+ - average_probability_real: {average_probability_real}
115
+ - average_probability_fake: {average_probability_fake}
 
 
 
 
 
 
 
116
  """
117
 
118
  response = client.models.generate_content(
119
  model=GEMINI_MODEL,
120
  contents=prompt,
121
+ config=types.GenerateContentConfig(
122
+ response_mime_type="application/json",
123
+ response_schema=AIAnalysisResult
124
+ )
 
 
 
 
 
 
 
125
  )
126
 
127
  if not response.text:
 
129
  "Gemini API tidak mengembalikan respons."
130
  )
131
 
132
+ parsed_result = AIAnalysisResult.model_validate_json(
133
+ response.text
 
 
 
134
  )
135
 
136
  return parsed_result.model_dump()