add footer & support
This commit is contained in:
parent
e709d776e9
commit
5e92c3c8a2
1
assets/icons/tg.svg
Normal file
1
assets/icons/tg.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="24px" height="24px"><linearGradient id="BiF7D16UlC0RZ_VqXJHnXa" x1="9.858" x2="38.142" y1="9.858" y2="38.142" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#33bef0"/><stop offset="1" stop-color="#0a85d9"/></linearGradient><path fill="url(#BiF7D16UlC0RZ_VqXJHnXa)" d="M44,24c0,11.045-8.955,20-20,20S4,35.045,4,24S12.955,4,24,4S44,12.955,44,24z"/><path d="M10.119,23.466c8.155-3.695,17.733-7.704,19.208-8.284c3.252-1.279,4.67,0.028,4.448,2.113 c-0.273,2.555-1.567,9.99-2.363,15.317c-0.466,3.117-2.154,4.072-4.059,2.863c-1.445-0.917-6.413-4.17-7.72-5.282 c-0.891-0.758-1.512-1.608-0.88-2.474c0.185-0.253,0.658-0.763,0.921-1.017c1.319-1.278,1.141-1.553-0.454-0.412 c-0.19,0.136-1.292,0.935-1.745,1.237c-1.11,0.74-2.131,0.78-3.862,0.192c-1.416-0.481-2.776-0.852-3.634-1.223 C8.794,25.983,8.34,24.272,10.119,23.466z" opacity=".05"/><path d="M10.836,23.591c7.572-3.385,16.884-7.264,18.246-7.813c3.264-1.318,4.465-0.536,4.114,2.011 c-0.326,2.358-1.483,9.654-2.294,14.545c-0.478,2.879-1.874,3.513-3.692,2.337c-1.139-0.734-5.723-3.754-6.835-4.633 c-0.86-0.679-1.751-1.463-0.71-2.598c0.348-0.379,2.27-2.234,3.707-3.614c0.833-0.801,0.536-1.196-0.469-0.508 c-1.843,1.263-4.858,3.262-5.396,3.625c-1.025,0.69-1.988,0.856-3.664,0.329c-1.321-0.416-2.597-0.819-3.262-1.078 C9.095,25.618,9.075,24.378,10.836,23.591z" opacity=".07"/><path fill="#fff" d="M11.553,23.717c6.99-3.075,16.035-6.824,17.284-7.343c3.275-1.358,4.28-1.098,3.779,1.91 c-0.36,2.162-1.398,9.319-2.226,13.774c-0.491,2.642-1.593,2.955-3.325,1.812c-0.833-0.55-5.038-3.331-5.951-3.984 c-0.833-0.595-1.982-1.311-0.541-2.721c0.513-0.502,3.874-3.712,6.493-6.21c0.343-0.328-0.088-0.867-0.484-0.604 c-3.53,2.341-8.424,5.59-9.047,6.013c-0.941,0.639-1.845,0.932-3.467,0.466c-1.226-0.352-2.423-0.772-2.889-0.932 C9.384,25.282,9.81,24.484,11.553,23.717z"/></svg>
|
After Width: | Height: | Size: 1.8 KiB |
56
chat.py
56
chat.py
@ -1,8 +1,9 @@
|
|||||||
from streamlit_option_menu import option_menu
|
from streamlit_option_menu import option_menu
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
from src.styles.menu_styles import HEADER_STYLES, FOOTER_STYLES
|
||||||
from src.utils.lang import en, ru
|
from src.utils.lang import en, ru
|
||||||
from src.utils.donates import show_donates
|
from src.utils.footer import show_donates, show_info
|
||||||
from src.utils.conversation import get_user_input, show_chat_buttons, show_conversation
|
from src.utils.conversation import get_user_input, show_chat_buttons, show_conversation
|
||||||
|
|
||||||
import streamlit as st
|
import streamlit as st
|
||||||
@ -10,8 +11,10 @@ import streamlit as st
|
|||||||
# --- PATH SETTINGS ---
|
# --- PATH SETTINGS ---
|
||||||
current_dir = Path(__file__).parent if "__file__" in locals() else Path.cwd()
|
current_dir = Path(__file__).parent if "__file__" in locals() else Path.cwd()
|
||||||
css_file = current_dir / "src/styles/.css"
|
css_file = current_dir / "src/styles/.css"
|
||||||
assets_dir = current_dir / "src/assets"
|
assets_dir = current_dir / "assets"
|
||||||
icons_dir = assets_dir / "icons"
|
icons_dir = assets_dir / "icons"
|
||||||
|
tg_svg = icons_dir / "telegram.svg"
|
||||||
|
tg_svg = icons_dir / "tg.svg"
|
||||||
|
|
||||||
# --- GENERAL SETTINGS ---
|
# --- GENERAL SETTINGS ---
|
||||||
PAGE_TITLE = "AI Talks"
|
PAGE_TITLE = "AI Talks"
|
||||||
@ -31,35 +34,11 @@ with open(css_file) as f:
|
|||||||
selected_lang = option_menu(
|
selected_lang = option_menu(
|
||||||
menu_title=None,
|
menu_title=None,
|
||||||
options=["En", "Ru", ],
|
options=["En", "Ru", ],
|
||||||
icons=["flag_en", "flag_ru"],
|
icons=["globe2", "globe"],
|
||||||
menu_icon="cast",
|
menu_icon="cast",
|
||||||
default_index=0,
|
default_index=1,
|
||||||
orientation="horizontal",
|
orientation="horizontal",
|
||||||
styles={
|
styles=HEADER_STYLES
|
||||||
"container": {
|
|
||||||
"padding": "0px",
|
|
||||||
"display": "grid",
|
|
||||||
"margin": "0!important",
|
|
||||||
"background-color": "#2C3333"
|
|
||||||
},
|
|
||||||
"icon": {"color": "#CBE4DE", "font-size": "14px"},
|
|
||||||
"nav-link": {
|
|
||||||
"font-size": "14px",
|
|
||||||
"text-align": "center",
|
|
||||||
"margin": "auto",
|
|
||||||
"background-color": "#2C3333",
|
|
||||||
"height": "30px",
|
|
||||||
"width": "7rem",
|
|
||||||
"color": "#CBE4DE",
|
|
||||||
"border-radius": "5px"
|
|
||||||
},
|
|
||||||
"nav-link-selected": {
|
|
||||||
"background-color": "#2E4F4F",
|
|
||||||
"font-weight": "300",
|
|
||||||
"color": "#f5f5f5",
|
|
||||||
"border": "1px solid #0E8388"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Storing The Context
|
# Storing The Context
|
||||||
@ -100,4 +79,21 @@ if __name__ == "__main__":
|
|||||||
main()
|
main()
|
||||||
st.markdown("---")
|
st.markdown("---")
|
||||||
st.image("assets/ai.jpg")
|
st.image("assets/ai.jpg")
|
||||||
show_donates()
|
st.markdown("---")
|
||||||
|
selected_footer = option_menu(
|
||||||
|
menu_title=None,
|
||||||
|
options=["Info", "Donates", ],
|
||||||
|
icons=["info-circle", "piggy-bank"],
|
||||||
|
menu_icon="cast",
|
||||||
|
default_index=0,
|
||||||
|
orientation="horizontal",
|
||||||
|
styles=FOOTER_STYLES
|
||||||
|
)
|
||||||
|
st.markdown("---")
|
||||||
|
match selected_footer:
|
||||||
|
case "Info":
|
||||||
|
show_info(tg_svg)
|
||||||
|
case "Donates":
|
||||||
|
show_donates()
|
||||||
|
case _:
|
||||||
|
show_info(tg_svg)
|
||||||
|
0
src/styles/__init__.py
Normal file
0
src/styles/__init__.py
Normal file
31
src/styles/menu_styles.py
Normal file
31
src/styles/menu_styles.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
HEADER_STYLES: Dict[str, Dict] = {
|
||||||
|
"container": {
|
||||||
|
"padding": "0px",
|
||||||
|
"display": "grid",
|
||||||
|
"margin": "0!important",
|
||||||
|
"background-color": "#2C3333"
|
||||||
|
},
|
||||||
|
"icon": {"color": "#CBE4DE", "font-size": "14px"},
|
||||||
|
"nav-link": {
|
||||||
|
"font-size": "14px",
|
||||||
|
"text-align": "center",
|
||||||
|
"margin": "auto",
|
||||||
|
"background-color": "#2C3333",
|
||||||
|
"height": "30px",
|
||||||
|
"width": "7rem",
|
||||||
|
"color": "#CBE4DE",
|
||||||
|
"border-radius": "5px"
|
||||||
|
},
|
||||||
|
"nav-link-selected": {
|
||||||
|
"background-color": "#2E4F4F",
|
||||||
|
"font-weight": "300",
|
||||||
|
"color": "#f5f5f5",
|
||||||
|
"border": "1px solid #0E8388"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FOOTER_STYLES: Dict[str, Dict] = {
|
||||||
|
|
||||||
|
}
|
@ -21,9 +21,9 @@ def get_user_input() -> str:
|
|||||||
def show_chat_buttons() -> None:
|
def show_chat_buttons() -> None:
|
||||||
b0, b1, b2 = st.columns(3)
|
b0, b1, b2 = st.columns(3)
|
||||||
with b0, b1, b2:
|
with b0, b1, b2:
|
||||||
b0.button(st.session_state.locale.chat_btn0)
|
b0.button(st.session_state.locale.chat_run_btn)
|
||||||
b1.button(st.session_state.locale.chat_btn1, on_click=st.cache_data.clear)
|
b1.button(st.session_state.locale.chat_rerun_btn, on_click=st.cache_data.clear)
|
||||||
b2.button(st.session_state.locale.chat_btn2, on_click=clear_chat)
|
b2.button(st.session_state.locale.chat_clear_btn, on_click=clear_chat)
|
||||||
|
|
||||||
|
|
||||||
def show_chat(ai_content: str, user_text: str) -> None:
|
def show_chat(ai_content: str, user_text: str) -> None:
|
||||||
|
@ -1,8 +1,19 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import streamlit as st
|
import streamlit as st
|
||||||
|
|
||||||
|
from src.utils.helpers import render_svg
|
||||||
|
|
||||||
|
|
||||||
|
def show_info(icon: Path) -> None:
|
||||||
|
st.markdown(f"""
|
||||||
|
### :page_with_curl: {st.session_state.locale.footer_title}
|
||||||
|
- {render_svg(icon)} [{st.session_state.locale.footer_chat}](https://t.me/talks_ai)
|
||||||
|
- {render_svg(icon)} [{st.session_state.locale.footer_channel}](https://t.me/talks_aii)
|
||||||
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
|
|
||||||
def show_donates() -> None:
|
def show_donates() -> None:
|
||||||
st.markdown("---")
|
|
||||||
st.markdown(f"""
|
st.markdown(f"""
|
||||||
### :moneybag: {st.session_state.locale.donates}
|
### :moneybag: {st.session_state.locale.donates}
|
||||||
**{st.session_state.locale.donates1}:**
|
**{st.session_state.locale.donates1}:**
|
9
src/utils/helpers.py
Normal file
9
src/utils/helpers.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import base64
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def render_svg(svg: Path) -> str:
|
||||||
|
"""Renders the given svg string."""
|
||||||
|
with open(svg) as file:
|
||||||
|
b64 = base64.b64encode(file.read().encode("utf-8")).decode("utf-8")
|
||||||
|
return f"<img src='data:image/svg+xml;base64,{b64}'/>"
|
@ -14,12 +14,15 @@ class Locale:
|
|||||||
donates1: str
|
donates1: str
|
||||||
donates2: str
|
donates2: str
|
||||||
chat_placeholder: str
|
chat_placeholder: str
|
||||||
chat_btn0: str
|
chat_run_btn: str
|
||||||
chat_btn1: str
|
chat_rerun_btn: str
|
||||||
chat_btn2: str
|
chat_clear_btn: str
|
||||||
select_placeholder1: str
|
select_placeholder1: str
|
||||||
select_placeholder2: str
|
select_placeholder2: str
|
||||||
stt_placeholder: str
|
stt_placeholder: str
|
||||||
|
footer_title: str
|
||||||
|
footer_chat: str
|
||||||
|
footer_channel: str
|
||||||
|
|
||||||
|
|
||||||
# Child data class for English
|
# Child data class for English
|
||||||
@ -33,12 +36,15 @@ class EnLocale(Locale):
|
|||||||
donates1: str = "Russia"
|
donates1: str = "Russia"
|
||||||
donates2: str = "World"
|
donates2: str = "World"
|
||||||
chat_placeholder: str = "Start Your Conversation With AI:"
|
chat_placeholder: str = "Start Your Conversation With AI:"
|
||||||
chat_btn0: str = "Run"
|
chat_run_btn: str = "Run"
|
||||||
chat_btn1: str = "Rerun"
|
chat_rerun_btn: str = "Rerun"
|
||||||
chat_btn2: str = "Clear Conversation"
|
chat_clear_btn: str = "Clear Conversation"
|
||||||
select_placeholder1: str = "Select AI Model"
|
select_placeholder1: str = "Select AI Model"
|
||||||
select_placeholder2: str = "Select AI Role"
|
select_placeholder2: str = "Select AI Role"
|
||||||
stt_placeholder: str = "To Hear The Voice Of AI, Press Play"
|
stt_placeholder: str = "To Hear The Voice Of AI, Press Play"
|
||||||
|
footer_title: str = "Support & Feedback"
|
||||||
|
footer_chat: str = "AI Talks Chat"
|
||||||
|
footer_channel: str = "AI Talks Channel"
|
||||||
|
|
||||||
|
|
||||||
# Child data class for Russian
|
# Child data class for Russian
|
||||||
@ -52,12 +58,15 @@ class RuLocale(Locale):
|
|||||||
donates1: str = "Россия"
|
donates1: str = "Россия"
|
||||||
donates2: str = "Остальной Мир"
|
donates2: str = "Остальной Мир"
|
||||||
chat_placeholder: str = "Начните Вашу Беседу с ИИ:"
|
chat_placeholder: str = "Начните Вашу Беседу с ИИ:"
|
||||||
chat_btn0: str = "Запустить"
|
chat_run_btn: str = "Запустить"
|
||||||
chat_btn1: str = "Перезапустить"
|
chat_rerun_btn: str = "Перезапустить"
|
||||||
chat_btn2: str = "Очистить Беседу"
|
chat_clear_btn: str = "Очистить Беседу"
|
||||||
select_placeholder1: str = "Выберите Модель ИИ"
|
select_placeholder1: str = "Выберите Модель ИИ"
|
||||||
select_placeholder2: str = "Выберите Роль ИИ"
|
select_placeholder2: str = "Выберите Роль ИИ"
|
||||||
stt_placeholder: str = "Чтобы Услышать ИИ Нажми Кнопку Проигрывателя"
|
stt_placeholder: str = "Чтобы Услышать ИИ Нажми Кнопку Проигрывателя"
|
||||||
|
footer_title: str = "Поддержка и Обратная Связь"
|
||||||
|
footer_chat: str = "Чат Разговорчики с ИИ"
|
||||||
|
footer_channel: str = "Канал Разговорчики с ИИ"
|
||||||
|
|
||||||
|
|
||||||
AI_ROLE_OPTIONS_EN = [
|
AI_ROLE_OPTIONS_EN = [
|
||||||
|
Loading…
Reference in New Issue
Block a user