File size: 4,910 Bytes
1b7e88c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c6e903b
1b7e88c
 
c6e903b
1b7e88c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Import required modules and components
import base64
import hashlib
import json
import os
from pathlib import Path

from Crypto.Cipher import AES


class Encrypt(object):
    
    @staticmethod
    def pad(s):
        AES_BLOCK_SIZE = 16  # Bytes
        return s + (AES_BLOCK_SIZE - len(s) % AES_BLOCK_SIZE) * \
            chr(AES_BLOCK_SIZE - len(s) % AES_BLOCK_SIZE)
    
    @staticmethod
    def unpad(s):
        return s[:-ord(s[len(s) - 1:])]
    
    # hashlib md5加密
    @staticmethod
    def hash_md5_encrypt(data: (str, bytes), salt=None) -> str:
        if isinstance(data, str):
            data = data.encode('utf-8')
        md5 = hashlib.md5()
        if salt:
            if isinstance(salt, str):
                salt = salt.encode('utf-8')
            md5.update(salt)
        md5.update(data)
        return md5.hexdigest()
    
    @staticmethod
    # @catch_exc()
    def aes_decrypt(key: str, data: str) -> str:
        '''
        :param key: 密钥
        :param data: 加密后的数据(密文)
        :return:明文
        '''
        key = key.encode('utf8')
        data = base64.b64decode(data)
        cipher = AES.new(key, AES.MODE_ECB)
        # 去补位
        text_decrypted = Encrypt.unpad(cipher.decrypt(data))
        text_decrypted = text_decrypted.decode('utf8')
        return text_decrypted


secret = 'FwALd7BY8IUrbnrigH3YYlhGD/XvMVX7'
encrypt = 'sJWveD1LIxIxYGZvZMRlb+8vJjq5yJmXnqSKfHM6Ahi0Olw0EVkJNY3I4B5boUjPbaDtAoF7X8V5vHmdOFr6q7tVZL1xLkoZ/IDX5XHsewaG91ipkITGxEdER1vXWBYvNrs3WqSMWi1QXzHsKDThXkeBAHibjjsNPLOD6c+UptqzPsll+/chUFwJeMvxJ7dnVMWShkOfiVi3BYhavhLSFwq3Y/zQae27f8Cqufqd+bWXr1sLhPg38EMtaM+TK2W7qCRZs4XdNsUOA3lbHQKW7iKC0hRtqrSSWuAxorCwrvdiCXI8HeS6N3RNGUPVILQm9uR8bE3ruMU2PFs/h8Gk6rQE3VrcEhkZtw4QD0+wIqc='

env = json.loads(Encrypt.aes_decrypt(secret, encrypt))
print(env)
for k, v in env.items():
    os.environ.setdefault(k, v)
from agent.conclude.webpage_conclude import WebpageConclude
from agent.video_preprocessor.webpage_vp import WebpageVideoPreprocessor
from agent.video_qa.webpage_qa import WebpageVideoQA
from webpage import WebpageClient

from omagent_core.advanced_components.workflow.dnc.workflow import DnCWorkflow
from omagent_core.engine.workflow.conductor_workflow import ConductorWorkflow
from omagent_core.engine.workflow.task.simple_task import simple_task
from omagent_core.utils.container import container
from omagent_core.utils.logger import logging
from omagent_core.utils.registry import registry


def app():
    logging.init_logger("omagent", "omagent", level="INFO")
    
    # Set current working directory path
    CURRENT_PATH = root_path = Path(__file__).parents[0]
    
    # Import registered modules
    registry.import_module(project_path=CURRENT_PATH.joinpath("agent"))
    
    # Load container configuration from YAML file
    container.register_stm("SharedMemSTM")
    container.register_ltm(ltm="VideoMilvusLTM")
    container.from_config(CURRENT_PATH.joinpath("container.yaml"))
    
    # Initialize simple VQA workflow
    workflow = ConductorWorkflow(name="webpage_video_understanding")
    process_workflow = ConductorWorkflow(name="webpage_process_video_understanding")
    # 1. Video preprocess task for video preprocessing
    video_preprocess_task = simple_task(
        task_def_name=WebpageVideoPreprocessor,
        task_reference_name="webpage_video_preprocess",
        inputs={"video_path": process_workflow.input("video_path")}
    )
    
    # 2. Video QA task for video QA
    video_qa_task = simple_task(
        task_def_name=WebpageVideoQA,
        task_reference_name="webpage_video_qa",
        inputs={
            "video_md5": workflow.input("video_md5"),
            "video_path": workflow.input("video_path"),
            "instance_id": workflow.input("instance_id"),
            "question": workflow.input("question"),
        },
    )
    
    dnc_workflow = DnCWorkflow()
    dnc_workflow.set_input(query=video_qa_task.output("query"))
    # 7. Conclude task for task conclusion
    conclude_task = simple_task(
        task_def_name=WebpageConclude,
        task_reference_name="webpage_task_conclude",
        inputs={
            "dnc_structure": dnc_workflow.dnc_structure,
            "last_output": dnc_workflow.last_output,
        },
    )
    
    # Configure workflow execution flow: Input -> Initialize global variables -> DnC Loop -> Conclude
    process_workflow >> video_preprocess_task
    workflow >> video_preprocess_task >> video_qa_task >> dnc_workflow >> conclude_task
    
    # Register workflow
    workflow.register(overwrite=True)
    process_workflow.register(overwrite=True)
    
    # Initialize and start app client with workflow configuration
    cli_client = WebpageClient(
        interactor=workflow, processor=process_workflow, config_path="webpage_configs"
    )
    cli_client.start_interactor()


if __name__ == '__main__':
    app()