Selaa lähdekoodia

schedule meeting

kevin 11 kuukautta sitten
vanhempi
commit
87d22f0eda
1 muutettua tiedostoa jossa 71 lisäystä ja 0 poistoa
  1. 71 0
      main.py

+ 71 - 0
main.py

@@ -1,3 +1,4 @@
+import datetime
 import logging
 import os
 import json
@@ -147,6 +148,66 @@ def vision(message, image_url=None, image_b64=None):
         result = {"status": "error", "message": "Please try again"}, 405
     return result
 
+def suggest_schedule(sched, message: list, assistant_id=None, timestamp=None):
+    result = {}
+    if timestamp is None:
+        timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
+    message[-1]["content"] = f"{message[-1]['content']} Sekarang jam {timestamp}.\n\n{json.dumps(sched)}"
+    try:
+        if assistant_id:
+            runs = app.openai_client.beta.threads.create_and_run_poll(
+                assistant_id=assistant_id,
+                thread={
+                    "messages": message
+                }
+            )
+            if runs.status == "completed":
+                messages = list(app.openai_client.beta.threads.messages.list(thread_id=runs.thread_id, run_id=runs.id))
+                message_content = messages[0].content[0].text
+                app.logger.info(message_content.value)
+                pattern = re.compile(r"【\d+:\d+†\(?source\)?】")
+                filtered_message = pattern.sub("", message_content.value)
+                result = {"role": "assistant", "content": filtered_message}
+        else:
+            json_response = app.openai_client.chat.completions.create(model="gpt-4o",
+                                                                      messages=message,
+                                                                      temperature=0.7)
+            response_message = json_response.choices[0].message.content
+            result = {"role": "assistant", "content": response_message}
+    except openai.APITimeoutError as e:
+        app.logger.exception("error")
+        result = {"status": "error", "message": e.message}, 408
+    except openai.NotFoundError as e:
+        app.logger.exception("error")
+        result = {"status": "error", "message": json.loads(e.response.content)['error']['message']}, e.status_code
+    except Exception as e:
+        app.logger.exception("error")
+        result = {"status": "error", "message": "Please try again"}, 405
+    return result
+
+
+def convert_to_schedule(message: list):
+    result = {}
+    message[-1]["content"] = f'{message[-1]["content"]} Ubah menjadi format json seperti berikut:\n\n{{"start_time": "2025-10-01 11:00", "end_time": "2025-10-01 13:00", "description": "Deskripsi kegiatan" }}'
+    try:
+        json_response = app.openai_client.chat.completions.create(
+            model="gpt-4o",
+            messages=message,
+            temperature=0.2,
+            response_format={"type": "json_object"}
+        )
+        response_message = json_response.choices[0].message.content
+        result = json.loads(response_message)
+    except openai.APITimeoutError as e:
+        app.logger.exception("error")
+        result = {"status": "error", "message": e.message}, 408
+    except openai.NotFoundError as e:
+        app.logger.exception("error")
+        result = {"status": "error", "message": json.loads(e.response.content)['error']['message']}, e.status_code
+    except Exception as e:
+        app.logger.exception("error")
+        result = {"status": "error", "message": "Please try again"}, 405
+    return result
 
 @app.route('/gpt', methods=['POST'])
 def gpt():
@@ -214,6 +275,16 @@ def gpt():
                 chat_model = assistant.model
             else:
                 chat_messages = app.chat_messages.copy()
+            if 'schedule' in json_payload:
+                timestamp = None
+                if 'timestamp' in json_payload:
+                    timestamp = json_payload["timestamp"]
+                sched = json_payload["schedule"].copy()
+                message = json_payload["payload"].copy()
+                return suggest_schedule(sched, message, assistant_id, timestamp)
+            elif 'convert_schedule' in json_payload:
+                if json_payload['convert_schedule'] == "1":
+                    return convert_to_schedule(json_payload['payload'].copy())
             json_payload = json_payload['payload']
             if isinstance(json_payload, dict):
                 json_payload = [json_payload]