File size: 5,681 Bytes
e294914
cab263c
d022aab
7c29ee2
1581bbf
7378fc8
 
e294914
 
d5436e0
 
 
f8dfb0f
d63135e
e294914
7378fc8
e294914
 
 
7378fc8
e294914
 
 
d022aab
7378fc8
 
d022aab
7c29ee2
 
7378fc8
7c29ee2
 
7378fc8
 
 
 
 
 
 
 
 
 
 
 
91b59ba
7378fc8
 
 
 
 
 
 
 
 
91b59ba
7378fc8
 
 
91b59ba
7c29ee2
42b403c
e294914
 
 
7378fc8
e294914
 
7378fc8
 
 
e294914
7378fc8
 
 
e294914
7378fc8
 
 
e294914
 
0f596d3
e294914
0f596d3
7378fc8
 
0f596d3
 
e294914
 
4affef3
 
d834bcd
 
 
 
d5436e0
e294914
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83cf282
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# version - ArcticMonkeys:30.07.24

# python core libraries
import re
import psutil
import time
import random
# streamlit
import streamlit as st
# components from other authors
from streamlit_mic_recorder import mic_recorder
# core modules
from audio_processing.A2T import A2T
from audio_processing.T2A import T2A
from llm.utils.chat import Conversation
from vlm.vlm import VLM
# utils modules
from utils.keywords import keywords
from utils.prompt_toggle import select_prompt, load_prompts
from utils.image_caption import ImageCaption

prompts = load_prompts()
chat = Conversation()
t2a = T2A()
vlm = VLM()
ic = ImageCaption()

def remove_labels_with_regex(text: str):
    pattern = r'^(Human:|AI:|Chelsea:)\s*'
    cleaned_text = re.sub(pattern, '', text, flags=re.MULTILINE)
    return cleaned_text

def exctrator(sentence, phrase="show me your image"):
    extracted_text = sentence.split(phrase)[1].strip() if phrase in sentence else ""
    return extracted_text

def switching(text):
    command = re.search("show me your image", text.lower(), re.IGNORECASE)
    result = None

    if command:
        prompt = exctrator(text.lower())
        # Завантажуємо зображення
        uploaded_image = ic.load_image()

        if uploaded_image is not None:
            # Якщо зображення завантажено, виконуємо обробку
            result = ic.send2ai(model=vlm, prompt=prompt)
        else:
            # Якщо зображення ще не завантажене, показуємо попередження
            st.warning("No image uploaded yet. Please upload an image to continue.")
    else:
        prompt = select_prompt(input_text=text, prompts=prompts, keywords=keywords)
        result = chat.chatting(prompt=prompt if prompt is not None else text)

    print(f"Prompt:\n{prompt}")
    prompt = None
    return result


def main():
    try:
        mic = mic_recorder(start_prompt="Record", stop_prompt="Stop", just_once=True, use_container_width=True)
        if mic is not None:
            start_time = time.perf_counter()
            a2t = A2T(mic["bytes"])
            text = a2t.predict()
            print(f"Text from A2T:\n{text}")
            execution_time = time.perf_counter() - start_time
            print(f"App.py -> main() -> time of execution A2T -> {execution_time}s")

            output = switching(text)
            response = remove_labels_with_regex(text=output)
            start_time_t2a = time.perf_counter()
            t2a.autoplay(response)
            execution_time_t2a = time.perf_counter() - start_time_t2a
            print(f"App.py -> main() -> time of execution T2A -> {execution_time_t2a}s")
            print(ic.pil_image)

            if response:
                st.markdown(f"Your input: {text}")
                st.markdown(f"Chelsea response: {response}")
                
                if ic.pil_image is not None:
                    st.image(ic.pil_image, caption="Uploaded Image", use_column_width=True)
                response = None
                
    except Exception as e:
        print(f"An error occurred in main finction, reasone is: {e}")

if __name__ == "__main__":
    print(f"Total Memory: {psutil.virtual_memory().total / (1024**3):.2f} GB")
    print(f"Available Memory: {psutil.virtual_memory().available / (1024**3):.2f} GB")
    print(f"CPU Cores: {psutil.cpu_count()}")
    print(f"CPU Usage: {psutil.cpu_percent()}%")
    main()
    footer="""
        <style>
            /* Common styles for the footer */
            .footer {
                position: fixed;
                left: 0;
                bottom: 0;
                width: 100%;
                height: 60px; /* Set a fixed height for consistency */
                font-size: 14px; /* Adjust font size for readability */
                text-align: center;
                padding: 15px 0; /* Reduced padding */
                transition: color 0.3s, background-color 0.3s;
            }
        
            .footer p {
                margin: 0; /* Remove default margins */
                font-size: 18px; /* Adjust font size as needed */
            }
        
            a:link, a:visited {
                text-decoration: dotted;
                color: inherit; /* Use current text color */
            }
        
            a:hover, a:active {
                background: linear-gradient(to right, #ffe44d, #ffdd1a, #ffd700, #ffd900);
                -webkit-text-fill-color: transparent;
                -webkit-background-clip: text;
            }
        
            .footer a:hover {
                color: #ff4500; /* Different hover color */
            }
        
            /* Light mode styles */
            @media (prefers-color-scheme: light) { 
                a:link, a:visited {
                    color: #0056b3; /* Blue color for links */
                }
        
                .footer a:hover {
                    color: #ff4500; /* Hover color for light mode */
                }
            }
        
            /* Dark mode styles */
            @media (prefers-color-scheme: dark) {        
                a:link, a:visited {
                    color: #ffd700; /* Gold color for links in dark mode */
                }
        
                .footer a:hover {
                    color: #ffa500; /* Hover color for dark mode */
                }
            }
        </style>
        
        <div class="footer">
            <p>Please support the project on <a href="https://buymeacoffee.com/cineai" target="_blank">Buy Me a Coffee</a></p>
        </div>
        """
    # st.markdown(footer,unsafe_allow_html=True)