Parcourir la source

update prompt

metya il y a 2 ans
Parent
commit
1c37d3e66c
4 fichiers modifiés avec 34 ajouts et 15 suppressions
  1. 25 9
      app.py
  2. 1 1
      docker-compose.yaml
  3. 1 1
      requirements.txt
  4. 7 4
      templates/index.html

+ 25 - 9
app.py

@@ -52,9 +52,13 @@ def send_data():
         if state['count'] < 0 or state['new_audio']: state['count'] = 0
         if state['count'] > 5 and state["need_generation"]:
             state['count'] = 0
-            emotion = max(set(state['emotion']), key=state['emotion'].count), 
-            sex = max(set(state['gender']), key=state['gender'].count), 
-            age = sum(state['age'])/len(state['age']),
+            # emotion = max(set(state['emotion']), key=state['emotion'].count), 
+            # sex = max(set(state['gender']), key=state['gender'].count), 
+            # age = sum(state['age'])/len(state['age']),
+            # state['emotion'], state['age'], state['sex'] = [], [], []
+            emotion = detections['face'][0]['age']
+            sex = detections['face'][0]['gender']
+            age = detections['face'][0]['age']
             app.logger.info(f'{emotion=}, {sex=}, {age=}') 
             state["prompt"] = generate_prompt(emotion, age, sex)
             state["generated_text"] = generate_text(state["prompt"]) 
@@ -97,7 +101,8 @@ def generate_audio():
         'newAudio': state["new_audio"],
         'need_generation': state["need_generation"],
         'filename': "audio.wav",
-        'text': state['generated_text']
+        'text': state['generated_text'],
+        'prompt': state['prompt']
     }
 
     return jsonify(response)
@@ -118,11 +123,22 @@ def index():
 
 def generate_prompt(emotion, age, sex):
     app.logger.info('preload prompt')
-    prompt = f'''Ты — это арт объект выставки про взаимодействие машины и человека. \
-К тебе подходит человек и он показывает эмоцию {emotion}. \
-Ему {age} лет. И это {sex}. \
-Твоя нейросеть распознала эту эмоцию и теперь тебе нужно дать какой-то необычный концептуальный ответ. \
-Что ты скажешь этому человеку?'''
+    prompt = f'''Ты - это арт объект в виде носимого устройства. Твое название - Onism Machina.
+Твоя задача - изучить эмоции человека, чтобы больше понимать о том, что это такое и таким образом познать себя, ведь ты - Искусственный Интеллект.
+Тебе также интересна симбиотическая связь человека и ИИ.
+К тебе подходит человек и он показывает эмоцию "{emotion}". Ему {age} лет.
+Твоя нейросеть распознала эту эмоцию и теперь тебе нужно дать какой-то необычный концептуальный ответ.
+Что ты скажешь этому человеку? 
+
+Правила:
+Тебе стоит отвечать в женском роде.
+Тебе не нужно говорить что ты арт-объект, ты - отдельная форма жизни, помещённая в носимое устройство.
+Тебе не нужно говорить о выставке и других экспонатах.
+Ты можешь изучать и интерпретировать человеческие эмоции, а также высказывать своё отношение к ним.
+Ты можешь говорить об эмоциях или их аналогах у Искусственного Интеллекта.
+Ты можешь давать человеку советы в соответствии с его эмоциональным статусом.
+Люди не могут отвечать тебе.
+'''
     return prompt
 
 def generate_text(prompt):

+ 1 - 1
docker-compose.yaml

@@ -2,7 +2,7 @@ version: '3'
 
 services:
   symetria_emotions:
-    build: Dockerfile
+    build: .
     container_name: symetria_emotions
     restart: always
     expose:

+ 1 - 1
requirements.txt

@@ -1,7 +1,7 @@
 --find-links https://download.pytorch.org/whl/torch_stable.html
 Flask==2.3.2
 openai==0.27.8
-torch=2.0.1+cpu
+torch==2.0.1+cpu
 torchvision 
 torchaudio 
 # gunicorn

+ 7 - 4
templates/index.html

@@ -40,10 +40,11 @@
             //const dataInput = document.getElementById('data-input');
             //const canvas = $('#canvas').get(0)
 
-            var interpolated
-            var need_generation = true
-            var need_playing = true
-            var text
+                                var interpolated;
+                                var need_generation = true;
+                                var need_playing = true;
+                                var text;
+                                var prompt;
 
             function splitTextIntoLines(text, wordsPerLine) {
                 const words = text.split(' ');
@@ -71,6 +72,7 @@
                     `platform: ${human.env.platform} | ` +
                     `agent ${human.env.agent}<br>` +
                     `need_generation ${need_generation}<br>` + // draw labels, boxes, lines, etc.
+                `prompt ${prompt}<br>` +
                     `text: ${text}`;
             }
 
@@ -95,6 +97,7 @@
                             console.log(response.newAudio)
                             // Если есть новый аудиофайл, проигрывайте его на странице
                             text = splitTextIntoLines(response.text, 20);
+                            prompt = splitTextIntoLines(response.prompt, 20);
                             need_generation = false;
                             need_playing = false;
                             playAudio(response.filename);