initial commit
118
README.md
@ -1,118 +0,0 @@
|
||||
# AI Talks
|
||||
|
||||
[![Streamlit App](https://static.streamlit.io/badges/streamlit_badge_black_white.svg)](https://agi-talks.streamlit.app)
|
||||
|
||||
![](ai_talks/assets/img/ai_face.png)
|
||||
|
||||
A ChatGPT API wrapper, providing a user-friendly Streamlit web interface.
|
||||
|
||||
Enhance your ChatGPT experience with our user-friendly API wrapper, featuring a seamless Streamlit web interface. Effortlessly interact with ChatGPT, while enjoying an intuitive and responsive design. Discover simplified access to advanced AI technology in just a few clicks.
|
||||
|
||||
<details>
|
||||
<summary>Demo</summary>
|
||||
|
||||
![](ai_talks/assets/demo/ai-talks.gif)
|
||||
|
||||
<details>
|
||||
<summary>Tokens counting</summary>
|
||||
|
||||
![](ai_talks/assets/demo/ai-talks-tokens.gif)
|
||||
|
||||
</details>
|
||||
|
||||
</details>
|
||||
|
||||
## Setup
|
||||
|
||||
1. Clone repo:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/dKosarevsky/AI-Talks.git
|
||||
```
|
||||
|
||||
2. Install dependencies:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
3. Add API key to `.streamlit/secrets.toml`
|
||||
|
||||
```toml
|
||||
[api_credentials]
|
||||
api_key = "sk-..."
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
To run the app use the following command:
|
||||
|
||||
```bash
|
||||
bash run.sh
|
||||
```
|
||||
|
||||
Another way:
|
||||
|
||||
```bash
|
||||
streamlit run ai_talks/chat.py
|
||||
```
|
||||
|
||||
Once the script is started, you can go to the URL [http://localhost:8501](http://localhost:8501) to start using the bot.
|
||||
|
||||
## License
|
||||
|
||||
This project is released under the [MIT License](LICENSE).
|
||||
|
||||
## Donation
|
||||
<details>
|
||||
<summary>Support project</summary>
|
||||
|
||||
`AI Talks` collects donations solely for the purpose of paying for the `Open AI` API.
|
||||
This allows you to provide access to communication with AI for all users.
|
||||
Support us for joint development and interaction with the intelligence of the future!
|
||||
|
||||
**Crypto:**
|
||||
|
||||
- Bitcoin (BTC)
|
||||
|
||||
```
|
||||
1HRDUif7oKDw9XJFXZ14TZZazokf4QH9fb
|
||||
```
|
||||
|
||||
- USD Tether (USDT TRC20):
|
||||
|
||||
```
|
||||
TMQ5RiyQ7bv3XjB6Wf6JbPHVrGkhBKtmfA
|
||||
```
|
||||
|
||||
- Toncoin (TON):
|
||||
|
||||
```
|
||||
UQDbnx17N2iOmxfQF0k55QScDMB0MHL9rsq-iGB93RMqDhIH
|
||||
```
|
||||
|
||||
**World:**
|
||||
- [Buy Me A Coffee](https://www.buymeacoffee.com/aitalks)
|
||||
- [ko-fi](https://ko-fi.com/ai_talks)
|
||||
- [PayPal](https://www.paypal.com/paypalme/aitalks)
|
||||
|
||||
**Russia:**
|
||||
- [Tinkoff](https://www.tinkoff.ru/cf/4Ugsr5kQ1sR)
|
||||
- [donationalerts](https://www.donationalerts.com/r/if_ai)
|
||||
- [boosty](https://boosty.to/ai-talks/donate)
|
||||
- [CloudTips](https://pay.cloudtips.ru/p/eafa15b2)
|
||||
|
||||
![](ai_talks/assets/qr/tink.png)
|
||||
|
||||
</details>
|
||||
|
||||
## Project Stats
|
||||
|
||||
<p align="center">
|
||||
<a href="https://star-history.com/#dKosarevsky/AI-Talks&Date">
|
||||
<img src="https://api.star-history.com/svg?repos=dKosarevsky/AI-Talks&type=Date" alt="All Stars History Chart">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 3.9 MiB |
Before Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 9.5 MiB |
Before Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 103 KiB |
BIN
ai_talks/assets/icons/favicons/0.png
Normal file
After Width: | Height: | Size: 370 KiB |
BIN
ai_talks/assets/icons/favicons/1.png
Normal file
After Width: | Height: | Size: 304 KiB |
BIN
ai_talks/assets/icons/favicons/2.png
Normal file
After Width: | Height: | Size: 378 KiB |
BIN
ai_talks/assets/icons/favicons/3.png
Normal file
After Width: | Height: | Size: 387 KiB |
Before Width: | Height: | Size: 331 KiB |
@ -1 +0,0 @@
|
||||
<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>
|
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 153 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 4.5 MiB |
Before Width: | Height: | Size: 5.4 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 5.0 MiB |
Before Width: | Height: | Size: 4.8 MiB |
Before Width: | Height: | Size: 3.0 MiB |
Before Width: | Height: | Size: 4.9 MiB |
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 82 KiB |
@ -1,13 +1,11 @@
|
||||
from pathlib import Path
|
||||
from random import randrange
|
||||
|
||||
import graphviz
|
||||
import streamlit as st
|
||||
from src.styles.menu_styles import FOOTER_STYLES, HEADER_STYLES
|
||||
from PIL import Image
|
||||
from src.utils.conversation import get_user_input, show_chat_buttons, show_conversation
|
||||
from src.utils.footer import show_donates, show_info
|
||||
from src.utils.helpers import get_files_in_dir, get_random_img
|
||||
from src.utils.lang import en, ru
|
||||
from streamlit_option_menu import option_menu
|
||||
from src.utils.lang import en
|
||||
|
||||
# --- PATH SETTINGS ---
|
||||
current_dir: Path = Path(__file__).parent if "__file__" in locals() else Path.cwd()
|
||||
@ -16,34 +14,23 @@ assets_dir: Path = current_dir / "assets"
|
||||
icons_dir: Path = assets_dir / "icons"
|
||||
img_dir: Path = assets_dir / "img"
|
||||
tg_svg: Path = icons_dir / "tg.svg"
|
||||
|
||||
favicon: Path = icons_dir / "favicons/0.png"
|
||||
# --- GENERAL SETTINGS ---
|
||||
PAGE_TITLE: str = "AI Talks"
|
||||
PAGE_ICON: str = "🤖"
|
||||
LANG_EN: str = "En"
|
||||
LANG_RU: str = "Ru"
|
||||
LANG_PL: str = "Pl"
|
||||
AI_MODEL_OPTIONS: list[str] = [
|
||||
"gpt-3.5-turbo",
|
||||
"gpt-4",
|
||||
"gpt-4-32k",
|
||||
]
|
||||
|
||||
st.set_page_config(page_title=PAGE_TITLE, page_icon=PAGE_ICON)
|
||||
CONFIG = {"page_title": "AMUsebot", "page_icon": Image.open(favicon)}
|
||||
|
||||
st.set_page_config(**CONFIG)
|
||||
|
||||
# --- LOAD CSS ---
|
||||
with open(css_file) as f:
|
||||
st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
|
||||
|
||||
selected_lang = option_menu(
|
||||
menu_title=None,
|
||||
options=[LANG_EN, LANG_RU, ],
|
||||
icons=["globe2", "translate"],
|
||||
menu_icon="cast",
|
||||
default_index=0,
|
||||
orientation="horizontal",
|
||||
styles=HEADER_STYLES
|
||||
)
|
||||
|
||||
# Storing The Context
|
||||
if "locale" not in st.session_state:
|
||||
st.session_state.locale = en
|
||||
@ -65,6 +52,24 @@ if "total_tokens" not in st.session_state:
|
||||
st.session_state.total_tokens = []
|
||||
|
||||
|
||||
def show_graph():
|
||||
# Create a graphlib graph object
|
||||
if st.session_state.generated:
|
||||
user, chatbot = [], []
|
||||
graph = graphviz.Digraph()
|
||||
for i in range(len(st.session_state.generated)):
|
||||
user.append(st.session_state.past[i])
|
||||
chatbot.append(st.session_state.generated[i])
|
||||
for x in range(len(user)):
|
||||
graph.edge(st.session_state.past[x], st.session_state.generated[x])
|
||||
try:
|
||||
graph.edge(st.session_state.generated[x], st.session_state.past[x+1])
|
||||
except:
|
||||
pass
|
||||
|
||||
st.graphviz_chart(graph)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
c1, c2 = st.columns(2)
|
||||
with c1, c2:
|
||||
@ -87,45 +92,14 @@ def main() -> None:
|
||||
c2.text_input(label=st.session_state.locale.select_placeholder3, key="role")
|
||||
|
||||
if st.session_state.user_text:
|
||||
show_graph()
|
||||
show_conversation()
|
||||
st.session_state.user_text = ""
|
||||
|
||||
get_user_input()
|
||||
|
||||
show_chat_buttons()
|
||||
|
||||
|
||||
def run_agi():
|
||||
match selected_lang:
|
||||
case "En":
|
||||
st.session_state.locale = en
|
||||
case "Ru":
|
||||
st.session_state.locale = ru
|
||||
case _:
|
||||
st.session_state.locale = en
|
||||
st.markdown(f"<h1 style='text-align: center;'>{st.session_state.locale.title}</h1>", unsafe_allow_html=True)
|
||||
selected_footer = option_menu(
|
||||
menu_title=None,
|
||||
options=[
|
||||
st.session_state.locale.footer_option1,
|
||||
st.session_state.locale.footer_option0,
|
||||
st.session_state.locale.footer_option2,
|
||||
],
|
||||
icons=["info-circle", "chat-square-text", "piggy-bank"], # https://icons.getbootstrap.com/
|
||||
menu_icon="cast",
|
||||
default_index=0,
|
||||
orientation="horizontal",
|
||||
styles=FOOTER_STYLES
|
||||
)
|
||||
match selected_footer:
|
||||
case st.session_state.locale.footer_option0:
|
||||
main()
|
||||
case st.session_state.locale.footer_option1:
|
||||
st.image(f"{img_dir}/{get_random_img(get_files_in_dir(img_dir))}")
|
||||
show_info(tg_svg)
|
||||
case st.session_state.locale.footer_option2:
|
||||
show_donates()
|
||||
case _:
|
||||
show_info(tg_svg)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_agi()
|
||||
st.markdown(f"<h1 style='text-align: center;'>{st.session_state.locale.title}</h1>", unsafe_allow_html=True)
|
||||
main()
|
||||
|
@ -7,16 +7,13 @@ import streamlit as st
|
||||
|
||||
@st.cache_data()
|
||||
def create_gpt_completion(ai_model: str, messages: List[dict]) -> dict:
|
||||
try:
|
||||
openai.api_key = st.secrets.api_credentials.api_key
|
||||
except (KeyError, AttributeError):
|
||||
st.error(st.session_state.locale.empty_api_handler)
|
||||
logging.info(f"{messages=}")
|
||||
completion = openai.ChatCompletion.create(
|
||||
model=ai_model,
|
||||
messages=messages,
|
||||
# stream=True,
|
||||
# temperature=0.7,
|
||||
)
|
||||
logging.info(f"{completion=}")
|
||||
return completion
|
||||
#logging.info(f"{messages=}")
|
||||
# completion = openai.ChatCompletion.create(
|
||||
# model=ai_model,
|
||||
# messages=messages,
|
||||
# # stream=True,
|
||||
# # temperature=0.7,
|
||||
# )
|
||||
#logging.info(f"{completion=}")
|
||||
# return completion
|
||||
pass
|
||||
|
@ -14,24 +14,3 @@ AI_ROLE_OPTIONS_EN: list[str] = [
|
||||
"translate corporate jargon into plain English",
|
||||
]
|
||||
|
||||
AI_ROLE_OPTIONS_RU: list[str] = [
|
||||
"ассистент, который готов помочь",
|
||||
"ассистент программиста",
|
||||
"рецензент кода программиста",
|
||||
"эксперт по улучшению текста",
|
||||
"эксперт по кинематографу",
|
||||
"эксперт в области спорта",
|
||||
"эксперт в онлайн-играх",
|
||||
"эксперт по рецептам блюд",
|
||||
"эксперт по английской грамматике",
|
||||
"эксперт по русской грамматике",
|
||||
"дружелюбный и полезный помощник преподавателя",
|
||||
"лаконичный помощник",
|
||||
"полезный помощник, следующий шаблонам",
|
||||
"переводчик корпоративного жаргона на простой русский",
|
||||
]
|
||||
|
||||
REPO_URL: str = "https://github.com/dKosarevsky/AI-Talks"
|
||||
README_URL: str = f"{REPO_URL}#readme"
|
||||
BUG_REPORT_URL: str = f"{REPO_URL}/issues"
|
||||
AI_TALKS_URL: str = "https://ai-talks.streamlit.app/"
|
||||
|
@ -1,9 +1,9 @@
|
||||
from random import randrange
|
||||
import string
|
||||
from random import randrange, choices
|
||||
|
||||
import streamlit as st
|
||||
from openai.error import InvalidRequestError, OpenAIError
|
||||
from streamlit_chat import message
|
||||
|
||||
from .agi.chat_gpt import create_gpt_completion
|
||||
from .stt import show_voice_input
|
||||
from .tts import show_audio_player
|
||||
@ -19,18 +19,15 @@ def clear_chat() -> None:
|
||||
st.session_state.total_tokens = []
|
||||
|
||||
|
||||
def show_text_input() -> None:
|
||||
st.text_area(label=st.session_state.locale.chat_placeholder, value=st.session_state.user_text, key="user_text")
|
||||
|
||||
|
||||
def get_user_input():
|
||||
match st.session_state.input_kind:
|
||||
case st.session_state.locale.input_kind_1:
|
||||
show_text_input()
|
||||
case st.session_state.locale.input_kind_2:
|
||||
show_voice_input()
|
||||
case _:
|
||||
show_text_input()
|
||||
# match st.session_state.input_kind:
|
||||
# case st.session_state.locale.input_kind_1:
|
||||
# show_text_input()
|
||||
# case st.session_state.locale.input_kind_2:
|
||||
# show_voice_input()
|
||||
# case _:
|
||||
# show_text_input()
|
||||
st.session_state.user_text = st.text_input("You: ", "Hello, how are you?", key="primary")
|
||||
|
||||
|
||||
def show_chat_buttons() -> None:
|
||||
@ -47,54 +44,15 @@ def show_chat_buttons() -> None:
|
||||
|
||||
|
||||
def show_chat(ai_content: str, user_text: str) -> None:
|
||||
if ai_content not in st.session_state.generated:
|
||||
# store the ai content
|
||||
if user_text not in st.session_state.past:
|
||||
# # store the ai content
|
||||
st.session_state.past.append(user_text)
|
||||
st.session_state.generated.append(ai_content)
|
||||
|
||||
if st.session_state.generated:
|
||||
for i in range(len(st.session_state.generated)):
|
||||
message(st.session_state.past[i], is_user=True, key=str(i) + "_user", seed=st.session_state.seed)
|
||||
message("", key=str(i), seed=st.session_state.seed)
|
||||
st.markdown(st.session_state.generated[i])
|
||||
st.caption(f"""
|
||||
{st.session_state.locale.tokens_count}{st.session_state.total_tokens[i]} |
|
||||
{st.session_state.locale.message_cost}{st.session_state.costs[i]:.5f}$
|
||||
""", help=f"{st.session_state.locale.total_cost}{sum(st.session_state.costs):.5f}$")
|
||||
|
||||
|
||||
def calc_cost(usage: dict) -> None:
|
||||
total_tokens = usage.get("total_tokens")
|
||||
prompt_tokens = usage.get("prompt_tokens")
|
||||
completion_tokens = usage.get("completion_tokens")
|
||||
st.session_state.total_tokens.append(total_tokens)
|
||||
# pricing logic: https://openai.com/pricing#language-models
|
||||
if st.session_state.model == "gpt-3.5-turbo":
|
||||
cost = total_tokens * 0.002 / 1000
|
||||
else:
|
||||
cost = (prompt_tokens * 0.03 + completion_tokens * 0.06) / 1000
|
||||
st.session_state.costs.append(cost)
|
||||
|
||||
|
||||
def show_gpt_conversation() -> None:
|
||||
try:
|
||||
completion = create_gpt_completion(st.session_state.model, st.session_state.messages)
|
||||
ai_content = completion.get("choices")[0].get("message").get("content")
|
||||
calc_cost(completion.get("usage"))
|
||||
st.session_state.messages.append({"role": "assistant", "content": ai_content})
|
||||
if ai_content:
|
||||
show_chat(ai_content, st.session_state.user_text)
|
||||
st.divider()
|
||||
show_audio_player(ai_content)
|
||||
except InvalidRequestError as err:
|
||||
if err.code == "context_length_exceeded":
|
||||
st.session_state.messages.pop(1)
|
||||
if len(st.session_state.messages) == 1:
|
||||
st.session_state.user_text = ""
|
||||
show_conversation()
|
||||
else:
|
||||
st.error(err)
|
||||
except (OpenAIError, UnboundLocalError) as err:
|
||||
st.error(err)
|
||||
message(st.session_state.generated[i], key=str(i), seed=st.session_state.seed)
|
||||
|
||||
|
||||
def show_conversation() -> None:
|
||||
@ -106,4 +64,13 @@ def show_conversation() -> None:
|
||||
{"role": "system", "content": ai_role},
|
||||
{"role": "user", "content": st.session_state.user_text},
|
||||
]
|
||||
show_gpt_conversation()
|
||||
|
||||
ai_content = "Dummy respone from AI"
|
||||
# delete random before deploying with our model
|
||||
random_str = ''.join(choices(string.ascii_uppercase + string.digits, k=5))
|
||||
ai_content += random_str
|
||||
st.session_state.messages.append({"role": "assistant", "content": ai_content})
|
||||
if ai_content:
|
||||
show_chat(ai_content, st.session_state.user_text)
|
||||
st.divider()
|
||||
show_audio_player(ai_content)
|
||||
|
@ -1,58 +0,0 @@
|
||||
from pathlib import Path
|
||||
|
||||
import streamlit as st
|
||||
|
||||
from .constants import BUG_REPORT_URL, REPO_URL
|
||||
from .helpers import render_svg
|
||||
|
||||
|
||||
def show_info(icon: Path) -> None:
|
||||
st.divider()
|
||||
st.markdown(f"<div style='text-align: justify;'>{st.session_state.locale.responsibility_denial}</div>",
|
||||
unsafe_allow_html=True)
|
||||
st.divider()
|
||||
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)
|
||||
st.divider()
|
||||
st.markdown(f"project [repo on github]({REPO_URL}) waiting for your :star: | [report]({BUG_REPORT_URL}) a bug")
|
||||
|
||||
|
||||
def show_donates() -> None:
|
||||
st.markdown(f"""
|
||||
### :moneybag: {st.session_state.locale.donates}
|
||||
|
||||
**Crypto:**
|
||||
- Bitcoin (BTC)
|
||||
```
|
||||
1HRDUif7oKDw9XJFXZ14TZZazokf4QH9fb
|
||||
```
|
||||
- USD Tether (USDT TRC20):
|
||||
```
|
||||
TMQ5RiyQ7bv3XjB6Wf6JbPHVrGkhBKtmfA
|
||||
```
|
||||
- Toncoin (TON):
|
||||
```
|
||||
UQDbnx17N2iOmxfQF0k55QScDMB0MHL9rsq-iGB93RMqDhIH
|
||||
```
|
||||
|
||||
**{st.session_state.locale.donates2}:**
|
||||
- [Buy Me A Coffee](https://www.buymeacoffee.com/aitalks)
|
||||
- [ko-fi](https://ko-fi.com/ai_talks)
|
||||
- [PayPal](https://www.paypal.com/paypalme/aitalks)
|
||||
""")
|
||||
st.markdown(f"""
|
||||
**{st.session_state.locale.donates1}:**
|
||||
- [Tinkoff](https://www.tinkoff.ru/cf/4Ugsr5kQ1sR)
|
||||
- [donationalerts](https://www.donationalerts.com/r/if_ai)
|
||||
- [boosty](https://boosty.to/ai-talks/donate)
|
||||
- [CloudTips](https://pay.cloudtips.ru/p/eafa15b2)
|
||||
""")
|
||||
_, img_col, _ = st.columns(3)
|
||||
with img_col:
|
||||
st.image("ai_talks/assets/qr/tink.png", width=200)
|
||||
st.divider()
|
||||
st.markdown(f"<div style='text-align: justify;'>{st.session_state.locale.donates_info}</div>",
|
||||
unsafe_allow_html=True)
|
@ -1,7 +1,7 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import List # NOQA: UP035
|
||||
|
||||
from .constants import AI_ROLE_OPTIONS_EN, AI_ROLE_OPTIONS_RU, AI_TALKS_URL, README_URL
|
||||
from .constants import AI_ROLE_OPTIONS_EN
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -32,16 +32,11 @@ class Locale:
|
||||
stt_placeholder: str
|
||||
footer_title: str
|
||||
footer_option0: str
|
||||
footer_option1: str
|
||||
footer_option2: str
|
||||
footer_chat: str
|
||||
footer_channel: str
|
||||
responsibility_denial: str
|
||||
donates_info: str
|
||||
tokens_count: str
|
||||
message_cost: str
|
||||
total_cost: str
|
||||
empty_api_handler: str
|
||||
|
||||
|
||||
# --- LOCALE SETTINGS ---
|
||||
@ -49,7 +44,7 @@ en = Locale(
|
||||
ai_role_options=AI_ROLE_OPTIONS_EN,
|
||||
ai_role_prefix="You are a female",
|
||||
ai_role_postfix="Answer as concisely as possible.",
|
||||
title="AI Talks",
|
||||
title="AMUsebot",
|
||||
language="English",
|
||||
lang_code="en",
|
||||
donates="Donates",
|
||||
@ -72,78 +67,9 @@ en = Locale(
|
||||
stt_placeholder="To Hear The Voice Of AI Press Play",
|
||||
footer_title="Support & Feedback",
|
||||
footer_option0="Chat",
|
||||
footer_option1="Info",
|
||||
footer_option2="Donate",
|
||||
footer_chat="AI Talks Chat",
|
||||
footer_channel="AI Talks Channel",
|
||||
responsibility_denial="""
|
||||
`AI Talks` uses the `Open AI` API to interact with `ChatGPT`, an AI that generates information.
|
||||
Please note that neural network responses may not be reliable, inaccurate or irrelevant.
|
||||
We are not responsible for any consequences associated with the use or reliance on the information provided.
|
||||
Use the received data at your discretion.
|
||||
""",
|
||||
donates_info="""
|
||||
`AI Talks` collects donations solely for the purpose of paying for the `Open AI` API.
|
||||
This allows you to provide access to communication with AI for all users.
|
||||
Support us for joint development and interaction with the intelligence of the future!
|
||||
""",
|
||||
tokens_count="Tokens count: ",
|
||||
message_cost="Message cost: ",
|
||||
total_cost="Total cost of conversation: ",
|
||||
empty_api_handler=f"""
|
||||
API key not found. Create `.streamlit/secrets.toml` with your API key.
|
||||
See [README.md]({README_URL}) for instructions or use the original [AI Talks]({AI_TALKS_URL}).
|
||||
""",
|
||||
)
|
||||
|
||||
ru = Locale(
|
||||
ai_role_options=AI_ROLE_OPTIONS_RU,
|
||||
ai_role_prefix="Вы девушка",
|
||||
ai_role_postfix="Отвечай максимально лаконично.",
|
||||
title="Разговорчики с ИИ",
|
||||
language="Russian",
|
||||
lang_code="ru",
|
||||
donates="Поддержать Проект",
|
||||
donates1="Россия",
|
||||
donates2="Остальной Мир",
|
||||
chat_placeholder="Начните Вашу Беседу с ИИ:",
|
||||
chat_run_btn="Спросить",
|
||||
chat_clear_btn="Очистить",
|
||||
chat_save_btn="Сохранить",
|
||||
speak_btn="Нажмите и Говорите",
|
||||
input_kind="Вид ввода",
|
||||
input_kind_1="Текст",
|
||||
input_kind_2="Голос [тестовый режим]",
|
||||
select_placeholder1="Выберите Модель",
|
||||
select_placeholder2="Выберите Роль",
|
||||
select_placeholder3="Создайте Роль",
|
||||
radio_placeholder="Взаимодествие с Ролью",
|
||||
radio_text1="Выбрать",
|
||||
radio_text2="Создать",
|
||||
stt_placeholder="Чтобы Услышать ИИ Нажми Кнопку Проигрывателя",
|
||||
footer_title="Поддержка и Обратная Связь",
|
||||
footer_option0="Чат",
|
||||
footer_option1="Инфо",
|
||||
footer_option2="Донаты",
|
||||
footer_chat="Чат Разговорчики с ИИ",
|
||||
footer_channel="Канал Разговорчики с ИИ",
|
||||
responsibility_denial="""
|
||||
`Разговорчики с ИИ` использует API `Open AI` для взаимодействия с `ChatGPT`, ИИ, генерирующим информацию.
|
||||
Пожалуйста, учтите, что ответы нейронной сети могут быть недостоверными, неточными или нерелевантными.
|
||||
Мы не несём ответственности за любые последствия,
|
||||
связанные с использованием или доверием к информации сгенерированныой нейронной сетью.
|
||||
Используйте полученные данные генераций на своё усмотрение.
|
||||
""",
|
||||
donates_info="""
|
||||
`AI Talks` собирает донаты исключительно с целью оплаты API `Open AI`.
|
||||
Это позволяет обеспечить доступ к общению с ИИ для всех желающих пользователей.
|
||||
Поддержите нас для совместного развития и взаимодействия с интеллектом будущего!
|
||||
""",
|
||||
tokens_count="Количество токенов: ",
|
||||
message_cost="Cтоимость сообщения: ",
|
||||
total_cost="Общая стоимость разговора: ",
|
||||
empty_api_handler=f"""
|
||||
Ключ API не найден. Создайте `.streamlit/secrets.toml` с вашим ключом API.
|
||||
Инструкции см. в [README.md]({README_URL}) или используйте оригинальный [AI Talks]({AI_TALKS_URL}).
|
||||
""",
|
||||
)
|
||||
|
@ -9,7 +9,7 @@ def show_audio_player(ai_content: str) -> None:
|
||||
try:
|
||||
tts = gTTS(text=ai_content, lang=st.session_state.locale.lang_code)
|
||||
tts.write_to_fp(sound_file)
|
||||
st.write(st.session_state.locale.stt_placeholder)
|
||||
st.write("try TTS")
|
||||
st.audio(sound_file)
|
||||
except gTTSError as err:
|
||||
st.error(err)
|
||||
|
@ -7,3 +7,6 @@ gtts>=2.3.1
|
||||
bokeh==2.4.2
|
||||
streamlit-bokeh-events>=0.1.2
|
||||
watchdog>=3.0.0
|
||||
setuptools~=65.5.0
|
||||
graphviz~=0.20.1
|
||||
Pillow~=9.5.0
|
34
setup.py
@ -1,34 +0,0 @@
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
# Read the contents of the requirements.txt file
|
||||
with open("requirements.txt") as f:
|
||||
requirements = [line.strip() for line in f.readlines() if not line.startswith("-f")]
|
||||
|
||||
setup(
|
||||
name="ai-talks",
|
||||
version="0.9.1",
|
||||
packages=find_packages(),
|
||||
include_package_data=True,
|
||||
install_requires=requirements, # Use the parsed requirements here
|
||||
entry_points={
|
||||
"console_scripts": [
|
||||
"ai-talks=ai_talks.chat:run_agi",
|
||||
],
|
||||
},
|
||||
author="Dmitry Kosarevsky",
|
||||
author_email="if.kosarevsky@gmail.com",
|
||||
description="A ChatGPT API wrapper, providing a user-friendly Streamlit web interface",
|
||||
long_description=open("README.md").read(),
|
||||
long_description_content_type="text/markdown",
|
||||
url="https://github.com/dKosarevsky/AI-Talks",
|
||||
classifiers=[
|
||||
"Development Status :: 3 - Alpha",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
],
|
||||
keywords="ai agi streamlit streamlit-component chat bot gpt llm",
|
||||
python_requires=">=3.10",
|
||||
)
|
472
vAI-Talks/Scripts/Activate.ps1
Normal file
@ -0,0 +1,472 @@
|
||||
<#
|
||||
.Synopsis
|
||||
Activate a Python virtual environment for the current PowerShell session.
|
||||
|
||||
.Description
|
||||
Pushes the python executable for a virtual environment to the front of the
|
||||
$Env:PATH environment variable and sets the prompt to signify that you are
|
||||
in a Python virtual environment. Makes use of the command line switches as
|
||||
well as the `pyvenv.cfg` file values present in the virtual environment.
|
||||
|
||||
.Parameter VenvDir
|
||||
Path to the directory that contains the virtual environment to activate. The
|
||||
default value for this is the parent of the directory that the Activate.ps1
|
||||
script is located within.
|
||||
|
||||
.Parameter Prompt
|
||||
The prompt prefix to display when this virtual environment is activated. By
|
||||
default, this prompt is the name of the virtual environment folder (VenvDir)
|
||||
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
|
||||
|
||||
.Example
|
||||
Activate.ps1
|
||||
Activates the Python virtual environment that contains the Activate.ps1 script.
|
||||
|
||||
.Example
|
||||
Activate.ps1 -Verbose
|
||||
Activates the Python virtual environment that contains the Activate.ps1 script,
|
||||
and shows extra information about the activation as it executes.
|
||||
|
||||
.Example
|
||||
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
|
||||
Activates the Python virtual environment located in the specified location.
|
||||
|
||||
.Example
|
||||
Activate.ps1 -Prompt "MyPython"
|
||||
Activates the Python virtual environment that contains the Activate.ps1 script,
|
||||
and prefixes the current prompt with the specified string (surrounded in
|
||||
parentheses) while the virtual environment is active.
|
||||
|
||||
.Notes
|
||||
On Windows, it may be required to enable this Activate.ps1 script by setting the
|
||||
execution policy for the user. You can do this by issuing the following PowerShell
|
||||
command:
|
||||
|
||||
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
|
||||
For more information on Execution Policies:
|
||||
https://go.microsoft.com/fwlink/?LinkID=135170
|
||||
|
||||
#>
|
||||
Param(
|
||||
[Parameter(Mandatory = $false)]
|
||||
[String]
|
||||
$VenvDir,
|
||||
[Parameter(Mandatory = $false)]
|
||||
[String]
|
||||
$Prompt
|
||||
)
|
||||
|
||||
<# Function declarations --------------------------------------------------- #>
|
||||
|
||||
<#
|
||||
.Synopsis
|
||||
Remove all shell session elements added by the Activate script, including the
|
||||
addition of the virtual environment's Python executable from the beginning of
|
||||
the PATH variable.
|
||||
|
||||
.Parameter NonDestructive
|
||||
If present, do not remove this function from the global namespace for the
|
||||
session.
|
||||
|
||||
#>
|
||||
function global:deactivate ([switch]$NonDestructive) {
|
||||
# Revert to original values
|
||||
|
||||
# The prior prompt:
|
||||
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
|
||||
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
|
||||
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
|
||||
}
|
||||
|
||||
# The prior PYTHONHOME:
|
||||
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
|
||||
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
|
||||
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
|
||||
}
|
||||
|
||||
# The prior PATH:
|
||||
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
|
||||
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
|
||||
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
|
||||
}
|
||||
|
||||
# Just remove the VIRTUAL_ENV altogether:
|
||||
if (Test-Path -Path Env:VIRTUAL_ENV) {
|
||||
Remove-Item -Path env:VIRTUAL_ENV
|
||||
}
|
||||
|
||||
# Just remove VIRTUAL_ENV_PROMPT altogether.
|
||||
if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
|
||||
Remove-Item -Path env:VIRTUAL_ENV_PROMPT
|
||||
}
|
||||
|
||||
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
|
||||
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
|
||||
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
|
||||
}
|
||||
|
||||
# Leave deactivate function in the global namespace if requested:
|
||||
if (-not $NonDestructive) {
|
||||
Remove-Item -Path function:deactivate
|
||||
}
|
||||
}
|
||||
|
||||
<#
|
||||
.Description
|
||||
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
|
||||
given folder, and returns them in a map.
|
||||
|
||||
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
|
||||
two strings separated by `=` (with any amount of whitespace surrounding the =)
|
||||
then it is considered a `key = value` line. The left hand string is the key,
|
||||
the right hand is the value.
|
||||
|
||||
If the value starts with a `'` or a `"` then the first and last character is
|
||||
stripped from the value before being captured.
|
||||
|
||||
.Parameter ConfigDir
|
||||
Path to the directory that contains the `pyvenv.cfg` file.
|
||||
#>
|
||||
function Get-PyVenvConfig(
|
||||
[String]
|
||||
$ConfigDir
|
||||
) {
|
||||
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
|
||||
|
||||
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
|
||||
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
|
||||
|
||||
# An empty map will be returned if no config file is found.
|
||||
$pyvenvConfig = @{ }
|
||||
|
||||
if ($pyvenvConfigPath) {
|
||||
|
||||
Write-Verbose "File exists, parse `key = value` lines"
|
||||
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
|
||||
|
||||
$pyvenvConfigContent | ForEach-Object {
|
||||
$keyval = $PSItem -split "\s*=\s*", 2
|
||||
if ($keyval[0] -and $keyval[1]) {
|
||||
$val = $keyval[1]
|
||||
|
||||
# Remove extraneous quotations around a string value.
|
||||
if ("'""".Contains($val.Substring(0, 1))) {
|
||||
$val = $val.Substring(1, $val.Length - 2)
|
||||
}
|
||||
|
||||
$pyvenvConfig[$keyval[0]] = $val
|
||||
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
|
||||
}
|
||||
}
|
||||
}
|
||||
return $pyvenvConfig
|
||||
}
|
||||
|
||||
|
||||
<# Begin Activate script --------------------------------------------------- #>
|
||||
|
||||
# Determine the containing directory of this script
|
||||
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
||||
$VenvExecDir = Get-Item -Path $VenvExecPath
|
||||
|
||||
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
|
||||
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
|
||||
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
|
||||
|
||||
# Set values required in priority: CmdLine, ConfigFile, Default
|
||||
# First, get the location of the virtual environment, it might not be
|
||||
# VenvExecDir if specified on the command line.
|
||||
if ($VenvDir) {
|
||||
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
|
||||
}
|
||||
else {
|
||||
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
|
||||
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
|
||||
Write-Verbose "VenvDir=$VenvDir"
|
||||
}
|
||||
|
||||
# Next, read the `pyvenv.cfg` file to determine any required value such
|
||||
# as `prompt`.
|
||||
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
|
||||
|
||||
# Next, set the prompt from the command line, or the config file, or
|
||||
# just use the name of the virtual environment folder.
|
||||
if ($Prompt) {
|
||||
Write-Verbose "Prompt specified as argument, using '$Prompt'"
|
||||
}
|
||||
else {
|
||||
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
|
||||
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
|
||||
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
|
||||
$Prompt = $pyvenvCfg['prompt'];
|
||||
}
|
||||
else {
|
||||
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
|
||||
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
|
||||
$Prompt = Split-Path -Path $venvDir -Leaf
|
||||
}
|
||||
}
|
||||
|
||||
Write-Verbose "Prompt = '$Prompt'"
|
||||
Write-Verbose "VenvDir='$VenvDir'"
|
||||
|
||||
# Deactivate any currently active virtual environment, but leave the
|
||||
# deactivate function in place.
|
||||
deactivate -nondestructive
|
||||
|
||||
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
|
||||
# that there is an activated venv.
|
||||
$env:VIRTUAL_ENV = $VenvDir
|
||||
|
||||
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
||||
|
||||
Write-Verbose "Setting prompt to '$Prompt'"
|
||||
|
||||
# Set the prompt to include the env name
|
||||
# Make sure _OLD_VIRTUAL_PROMPT is global
|
||||
function global:_OLD_VIRTUAL_PROMPT { "" }
|
||||
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
|
||||
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
|
||||
|
||||
function global:prompt {
|
||||
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
|
||||
_OLD_VIRTUAL_PROMPT
|
||||
}
|
||||
$env:VIRTUAL_ENV_PROMPT = $Prompt
|
||||
}
|
||||
|
||||
# Clear PYTHONHOME
|
||||
if (Test-Path -Path Env:PYTHONHOME) {
|
||||
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
|
||||
Remove-Item -Path Env:PYTHONHOME
|
||||
}
|
||||
|
||||
# Add the venv to the PATH
|
||||
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
|
||||
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
|
||||
|
||||
# SIG # Begin signature block
|
||||
# MIIpigYJKoZIhvcNAQcCoIIpezCCKXcCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
||||
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk
|
||||
# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCDi8wggawMIIEmKADAgECAhAIrUCyYNKc
|
||||
# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
|
||||
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
|
||||
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z
|
||||
# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
|
||||
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
|
||||
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
||||
# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0
|
||||
# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr
|
||||
# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF
|
||||
# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F
|
||||
# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh
|
||||
# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ
|
||||
# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay
|
||||
# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI
|
||||
# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp
|
||||
# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro
|
||||
# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB
|
||||
# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+
|
||||
# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P
|
||||
# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk
|
||||
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC
|
||||
# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
|
||||
# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j
|
||||
# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED
|
||||
# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql
|
||||
# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF
|
||||
# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h
|
||||
# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw
|
||||
# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld
|
||||
# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw
|
||||
# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP
|
||||
# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE
|
||||
# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn
|
||||
# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji
|
||||
# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq
|
||||
# yK+p/pQd52MbOoZWeE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0G
|
||||
# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
|
||||
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
|
||||
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1
|
||||
# MjM1OTU5WjB8MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQH
|
||||
# EwlCZWF2ZXJ0b24xIzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9u
|
||||
# MSMwIQYDVQQDExpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZI
|
||||
# hvcNAQEBBQADggIPADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiS
|
||||
# YgDFfwhjQy89koM7uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi
|
||||
# 0GGAZUegEAeRlSXxxhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN1
|
||||
# 6yS8skFa3IHyvWdbD9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGu
|
||||
# ppxcia6a7xCyKoOAGjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu35
|
||||
# 2diDY+iCMpk9ZanmSjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0
|
||||
# ZFYKeb6BLA66d2GALwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oE
|
||||
# RzTzEiV6nCO1M3U1HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZ
|
||||
# I7IWe7JKhHohqKuceQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16x
|
||||
# ot2KVPdfyPAWd81wtZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapP
|
||||
# Unwo8ygflJJ74J+BYxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3Z
|
||||
# Ily+qIqDAgMBAAGjggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiI
|
||||
# ZfROQjAdBgNVHQ4EFgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQD
|
||||
# AgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0
|
||||
# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu
|
||||
# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5k
|
||||
# aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZT
|
||||
# SEEzODQyMDIxQ0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUF
|
||||
# BwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGH
|
||||
# MIGEMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYB
|
||||
# BQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0
|
||||
# ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB
|
||||
# /wQCMAAwDQYJKoZIhvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcW
|
||||
# TiNc2rskrNLrfH1Ns0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+
|
||||
# VVzxC88pOEvz68nA82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfL
|
||||
# IJQsAHBla0i7QRF2de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izW
|
||||
# OXM95BSkFSKdE45Oq3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86
|
||||
# WmjRUqbrnvdyR2ydI5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+
|
||||
# W1scCpnA8YTs2d50jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM5
|
||||
# 8WEDkbeoriDk3hxU8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMf
|
||||
# ZOm5cuclMnUHs2uqrRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw
|
||||
# /TKqVL4Oaz3bkMSsM46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3
|
||||
# r7bjyHTxOgqxRCVa18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VH
|
||||
# xaZg2unjHY3rMYIasTCCGq0CAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
|
||||
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29k
|
||||
# ZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM
|
||||
# 0NHdMA0GCWCGSAFlAwQCAQUAoIHEMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
|
||||
# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBn
|
||||
# AZ6P7YvTwq0fbF62o7E75R0LxsW5OtyYiFESQckLhjBYBgorBgEEAYI3AgEMMUow
|
||||
# SKBGgEQAQgB1AGkAbAB0ADoAIABSAGUAbABlAGEAcwBlAF8AdgAzAC4AMQAwAC4A
|
||||
# OQBfADIAMAAyADIAMQAyADAANgAuADAAMTANBgkqhkiG9w0BAQEFAASCAgBnt8t/
|
||||
# IAYSvbxxChLGnEx38CMrIV5R/JpuAHbUs3u2QdylXJzYRqn70Ka37arLzobiEp0v
|
||||
# oZ4tAdhAnbgMLx53V6fFR7GAW8tb8FlNzgB1NpSInXbtPPuVhIErS/1+tbGJW8E9
|
||||
# 23XoWXYLLeuGKjTT+nM2aQvMmyCdZ+M1jEoHFpjyu8M1QtD4qhxyG8eDEv1VP1hH
|
||||
# YAARgJyZ4j/KrYSN0VYC9cQZ91wgLSQH7Co5ys9kDBlh4wGoL0LYbZca9h0LFjfq
|
||||
# fmEAO0hAl+6njqPrcpSOKXla7FAYHfDKju1ILWUoOZNpN+7FZnXnidpCIF733Rfn
|
||||
# mrfZMHWwEltYJmTWX3I/1ahu+e9jWRYBFccMWLAk9o8ufXIUJmUGh5MC7BnXLN8E
|
||||
# UVLn5GnbIjXbQFgv10xgvLE5ABAe5h+CDu5ONZR6f6Cuaopic+BqhyIqmVN+G2YU
|
||||
# Me8r6PU1/9Hv/IfwEWHbQmMaPP7sxRDSgFLXV8MKB+EBZvlMR+RrugU6aLSzSX/f
|
||||
# FJhLRwcWSeckKbACoscK7B84VJYLFAkmDo68cgdWchkIZAwPFvvlOjm9xftTfFBf
|
||||
# yZANw3zB3WwwOo25FLKvhRcHuRhNa1UZs5geuAS18SUlFDhHZvujYR01b9yaX7Rf
|
||||
# Q+wYmY9p03V7+xJKDjW21L2Edyn5GPWhr/iz+6GCFz4wghc6BgorBgEEAYI3AwMB
|
||||
# MYIXKjCCFyYGCSqGSIb3DQEHAqCCFxcwghcTAgEDMQ8wDQYJYIZIAWUDBAIBBQAw
|
||||
# eAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG/WwHATAxMA0GCWCGSAFlAwQC
|
||||
# AQUABCAsNsKJ+01YLc4nvDX4jSzWlhvN6hw9d7aZ35SkV39eXAIRAM5OX9DT2mdc
|
||||
# 4fdF7rOZJxsYDzIwMjIxMjA2MjAyNDQxWqCCEwcwggbAMIIEqKADAgECAhAMTWly
|
||||
# S5T6PCpKPSkHgD1aMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAlVTMRcwFQYD
|
||||
# VQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBH
|
||||
# NCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMjIwOTIxMDAwMDAw
|
||||
# WhcNMzMxMTIxMjM1OTU5WjBGMQswCQYDVQQGEwJVUzERMA8GA1UEChMIRGlnaUNl
|
||||
# cnQxJDAiBgNVBAMTG0RpZ2lDZXJ0IFRpbWVzdGFtcCAyMDIyIC0gMjCCAiIwDQYJ
|
||||
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBAM/spSY6xqnya7uNwQ2a26HoFIV0Mxom
|
||||
# rNAcVR4eNm28klUMYfSdCXc9FZYIL2tkpP0GgxbXkZI4HDEClvtysZc6Va8z7GGK
|
||||
# 6aYo25BjXL2JU+A6LYyHQq4mpOS7eHi5ehbhVsbAumRTuyoW51BIu4hpDIjG8b7g
|
||||
# L307scpTjUCDHufLckkoHkyAHoVW54Xt8mG8qjoHffarbuVm3eJc9S/tjdRNlYRo
|
||||
# 44DLannR0hCRRinrPibytIzNTLlmyLuqUDgN5YyUXRlav/V7QG5vFqianJVHhoV5
|
||||
# PgxeZowaCiS+nKrSnLb3T254xCg/oxwPUAY3ugjZNaa1Htp4WB056PhMkRCWfk3h
|
||||
# 3cKtpX74LRsf7CtGGKMZ9jn39cFPcS6JAxGiS7uYv/pP5Hs27wZE5FX/NurlfDHn
|
||||
# 88JSxOYWe1p+pSVz28BqmSEtY+VZ9U0vkB8nt9KrFOU4ZodRCGv7U0M50GT6Vs/g
|
||||
# 9ArmFG1keLuY/ZTDcyHzL8IuINeBrNPxB9ThvdldS24xlCmL5kGkZZTAWOXlLimQ
|
||||
# prdhZPrZIGwYUWC6poEPCSVT8b876asHDmoHOWIZydaFfxPZjXnPYsXs4Xu5zGcT
|
||||
# B5rBeO3GiMiwbjJ5xwtZg43G7vUsfHuOy2SJ8bHEuOdTXl9V0n0ZKVkDTvpd6kVz
|
||||
# HIR+187i1Dp3AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/
|
||||
# BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgGBmeBDAEE
|
||||
# AjALBglghkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxqII+eyG8w
|
||||
# HQYDVR0OBBYEFGKK3tBh/I8xFO2XC809KpQU31KcMFoGA1UdHwRTMFEwT6BNoEuG
|
||||
# SWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQw
|
||||
# OTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGDMIGAMCQG
|
||||
# CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYBBQUHMAKG
|
||||
# TGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJT
|
||||
# QTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQELBQADggIB
|
||||
# AFWqKhrzRvN4Vzcw/HXjT9aFI/H8+ZU5myXm93KKmMN31GT8Ffs2wklRLHiIY1UJ
|
||||
# RjkA/GnUypsp+6M/wMkAmxMdsJiJ3HjyzXyFzVOdr2LiYWajFCpFh0qYQitQ/Bu1
|
||||
# nggwCfrkLdcJiXn5CeaIzn0buGqim8FTYAnoo7id160fHLjsmEHw9g6A++T/350Q
|
||||
# p+sAul9Kjxo6UrTqvwlJFTU2WZoPVNKyG39+XgmtdlSKdG3K0gVnK3br/5iyJpU4
|
||||
# GYhEFOUKWaJr5yI+RCHSPxzAm+18SLLYkgyRTzxmlK9dAlPrnuKe5NMfhgFknADC
|
||||
# 6Vp0dQ094XmIvxwBl8kZI4DXNlpflhaxYwzGRkA7zl011Fk+Q5oYrsPJy8P7mxNf
|
||||
# arXH4PMFw1nfJ2Ir3kHJU7n/NBBn9iYymHv+XEKUgZSCnawKi8ZLFUrTmJBFYDOA
|
||||
# 4CPe+AOk9kVH5c64A0JH6EE2cXet/aLol3ROLtoeHYxayB6a1cLwxiKoT5u92Bya
|
||||
# UcQvmvZfpyeXupYuhVfAYOd4Vn9q78KVmksRAsiCnMkaBXy6cbVOepls9Oie1FqY
|
||||
# yJ+/jbsYXEP10Cro4mLueATbvdH7WwqocH7wl4R44wgDXUcsY6glOJcB0j862uXl
|
||||
# 9uab3H4szP8XTE0AotjWAQ64i+7m4HJViSwnGWH2dwGMMIIGrjCCBJagAwIBAgIQ
|
||||
# BzY3tyRUfNhHrP0oZipeWzANBgkqhkiG9w0BAQsFADBiMQswCQYDVQQGEwJVUzEV
|
||||
# MBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t
|
||||
# MSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMjIwMzIzMDAw
|
||||
# MDAwWhcNMzcwMzIyMjM1OTU5WjBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGln
|
||||
# aUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5
|
||||
# NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
|
||||
# MIICCgKCAgEAxoY1BkmzwT1ySVFVxyUDxPKRN6mXUaHW0oPRnkyibaCwzIP5WvYR
|
||||
# oUQVQl+kiPNo+n3znIkLf50fng8zH1ATCyZzlm34V6gCff1DtITaEfFzsbPuK4CE
|
||||
# iiIY3+vaPcQXf6sZKz5C3GeO6lE98NZW1OcoLevTsbV15x8GZY2UKdPZ7Gnf2ZCH
|
||||
# RgB720RBidx8ald68Dd5n12sy+iEZLRS8nZH92GDGd1ftFQLIWhuNyG7QKxfst5K
|
||||
# fc71ORJn7w6lY2zkpsUdzTYNXNXmG6jBZHRAp8ByxbpOH7G1WE15/tePc5OsLDni
|
||||
# pUjW8LAxE6lXKZYnLvWHpo9OdhVVJnCYJn+gGkcgQ+NDY4B7dW4nJZCYOjgRs/b2
|
||||
# nuY7W+yB3iIU2YIqx5K/oN7jPqJz+ucfWmyU8lKVEStYdEAoq3NDzt9KoRxrOMUp
|
||||
# 88qqlnNCaJ+2RrOdOqPVA+C/8KI8ykLcGEh/FDTP0kyr75s9/g64ZCr6dSgkQe1C
|
||||
# vwWcZklSUPRR8zZJTYsg0ixXNXkrqPNFYLwjjVj33GHek/45wPmyMKVM1+mYSlg+
|
||||
# 0wOI/rOP015LdhJRk8mMDDtbiiKowSYI+RQQEgN9XyO7ZONj4KbhPvbCdLI/Hgl2
|
||||
# 7KtdRnXiYKNYCQEoAA6EVO7O6V3IXjASvUaetdN2udIOa5kM0jO0zbECAwEAAaOC
|
||||
# AV0wggFZMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLoW2W1NhS9zKXaa
|
||||
# L3WMaiCPnshvMB8GA1UdIwQYMBaAFOzX44LScV1kTN8uZz/nupiuHA9PMA4GA1Ud
|
||||
# DwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDCDB3BggrBgEFBQcBAQRrMGkw
|
||||
# JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBBBggrBgEFBQcw
|
||||
# AoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJv
|
||||
# b3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybDMuZGlnaWNlcnQu
|
||||
# Y29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmwwIAYDVR0gBBkwFzAIBgZngQwB
|
||||
# BAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4ICAQB9WY7Ak7ZvmKlEIgF+
|
||||
# ZtbYIULhsBguEE0TzzBTzr8Y+8dQXeJLKftwig2qKWn8acHPHQfpPmDI2AvlXFvX
|
||||
# bYf6hCAlNDFnzbYSlm/EUExiHQwIgqgWvalWzxVzjQEiJc6VaT9Hd/tydBTX/6tP
|
||||
# iix6q4XNQ1/tYLaqT5Fmniye4Iqs5f2MvGQmh2ySvZ180HAKfO+ovHVPulr3qRCy
|
||||
# Xen/KFSJ8NWKcXZl2szwcqMj+sAngkSumScbqyQeJsG33irr9p6xeZmBo1aGqwpF
|
||||
# yd/EjaDnmPv7pp1yr8THwcFqcdnGE4AJxLafzYeHJLtPo0m5d2aR8XKc6UsCUqc3
|
||||
# fpNTrDsdCEkPlM05et3/JWOZJyw9P2un8WbDQc1PtkCbISFA0LcTJM3cHXg65J6t
|
||||
# 5TRxktcma+Q4c6umAU+9Pzt4rUyt+8SVe+0KXzM5h0F4ejjpnOHdI/0dKNPH+ejx
|
||||
# mF/7K9h+8kaddSweJywm228Vex4Ziza4k9Tm8heZWcpw8De/mADfIBZPJ/tgZxah
|
||||
# ZrrdVcA6KYawmKAr7ZVBtzrVFZgxtGIJDwq9gdkT/r+k0fNX2bwE+oLeMt8EifAA
|
||||
# zV3C+dAjfwAL5HYCJtnwZXZCpimHCUcr5n8apIUP/JiW9lVUKx+A+sDyDivl1vup
|
||||
# L0QVSucTDh3bNzgaoSv27dZ8/DCCBY0wggR1oAMCAQICEA6bGI750C3n79tQ4ghA
|
||||
# GFowDQYJKoZIhvcNAQEMBQAwZTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lD
|
||||
# ZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEkMCIGA1UEAxMbRGln
|
||||
# aUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTIyMDgwMTAwMDAwMFoXDTMxMTEw
|
||||
# OTIzNTk1OVowYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
||||
# MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1
|
||||
# c3RlZCBSb290IEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv+aQ
|
||||
# c2jeu+RdSjwwIjBpM+zCpyUuySE98orYWcLhKac9WKt2ms2uexuEDcQwH/MbpDgW
|
||||
# 61bGl20dq7J58soR0uRf1gU8Ug9SH8aeFaV+vp+pVxZZVXKvaJNwwrK6dZlqczKU
|
||||
# 0RBEEC7fgvMHhOZ0O21x4i0MG+4g1ckgHWMpLc7sXk7Ik/ghYZs06wXGXuxbGrzr
|
||||
# yc/NrDRAX7F6Zu53yEioZldXn1RYjgwrt0+nMNlW7sp7XeOtyU9e5TXnMcvak17c
|
||||
# jo+A2raRmECQecN4x7axxLVqGDgDEI3Y1DekLgV9iPWCPhCRcKtVgkEy19sEcypu
|
||||
# kQF8IUzUvK4bA3VdeGbZOjFEmjNAvwjXWkmkwuapoGfdpCe8oU85tRFYF/ckXEaP
|
||||
# ZPfBaYh2mHY9WV1CdoeJl2l6SPDgohIbZpp0yt5LHucOY67m1O+SkjqePdwA5EUl
|
||||
# ibaaRBkrfsCUtNJhbesz2cXfSwQAzH0clcOP9yGyshG3u3/y1YxwLEFgqrFjGESV
|
||||
# GnZifvaAsPvoZKYz0YkH4b235kOkGLimdwHhD5QMIR2yVCkliWzlDlJRR3S+Jqy2
|
||||
# QXXeeqxfjT/JvNNBERJb5RBQ6zHFynIWIgnffEx1P2PsIV/EIFFrb7GrhotPwtZF
|
||||
# X50g/KEexcCPorF+CiaZ9eRpL5gdLfXZqbId5RsCAwEAAaOCATowggE2MA8GA1Ud
|
||||
# EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOzX44LScV1kTN8uZz/nupiuHA9PMB8GA1Ud
|
||||
# IwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMA4GA1UdDwEB/wQEAwIBhjB5Bggr
|
||||
# BgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNv
|
||||
# bTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lD
|
||||
# ZXJ0QXNzdXJlZElEUm9vdENBLmNydDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8v
|
||||
# Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMBEG
|
||||
# A1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQwFAAOCAQEAcKC/Q1xV5zhfoKN0
|
||||
# Gz22Ftf3v1cHvZqsoYcs7IVeqRq7IviHGmlUIu2kiHdtvRoU9BNKei8ttzjv9P+A
|
||||
# ufih9/Jy3iS8UgPITtAq3votVs/59PesMHqai7Je1M/RQ0SbQyHrlnKhSLSZy51P
|
||||
# pwYDE3cnRNTnf+hZqPC/Lwum6fI0POz3A8eHqNJMQBk1RmppVLC4oVaO7KTVPeix
|
||||
# 3P0c2PR3WlxUjG/voVA9/HYJaISfb8rbII01YBwCA8sgsKxYoA5AY8WYIsGyWfVV
|
||||
# a88nq2x2zm8jLfR+cWojayL/ErhULSd+2DrZ8LaHlv1b0VysGMNNn3O3AamfV6pe
|
||||
# KOK5lDGCA3YwggNyAgEBMHcwYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lD
|
||||
# ZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYg
|
||||
# U0hBMjU2IFRpbWVTdGFtcGluZyBDQQIQDE1pckuU+jwqSj0pB4A9WjANBglghkgB
|
||||
# ZQMEAgEFAKCB0TAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcN
|
||||
# AQkFMQ8XDTIyMTIwNjIwMjQ0MVowKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQU84ci
|
||||
# TYYzgpI1qZS8vY+W6f4cfHMwLwYJKoZIhvcNAQkEMSIEIIptYZHk2Y2pzME5v8x5
|
||||
# n9oUv2BNEtOvI86cIzxa8S+hMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIMf04b4y
|
||||
# KIkgq+ImOr4axPxP5ngcLWTQTIB1V6Ajtbb6MA0GCSqGSIb3DQEBAQUABIICAFfR
|
||||
# O5/Dw5hUl8z+DoI3/oGXAdTW6YWAFfjSNHmhw0q3fNH4yYRZ6S1zK86dUWd6fUcm
|
||||
# iQZY9pS+uKT0iHdxlpjsnFzTGx/ouVwKFQdCi8hkC/TmI0+XhE9pHjQzBrwu01eb
|
||||
# 4wWFUeZZXwuPA7UyJiE5FpG8n0GKoDCVkI91u90QQDhRWNiOY8VK/SWRjNMulLP4
|
||||
# pE+XtoHaWCeYirN7uN+ObP2NIaJfAlt3iGzo0KireyaufJ3hNphnB1N16prXo1Gi
|
||||
# mgN38KqZFQSxvpxC8EVRSJQP+psTQClvqQYVv03CS8A5ta8G49/v26Q/JddjG9FA
|
||||
# 1o00BZw1+hv/v8QPuJX9x07HHDrQSusbrQOIgJHjaFEmUXvyVk4DF6KEGTxf5Wfh
|
||||
# 3oN3l8qJMGOXqMPaqqlQOjoVe8JvdpUNrzfOg0gMN+qHBYN8oqnt+fUhu+Q6fkSa
|
||||
# r7n/o6/x1eJd+BhxUa6guhRGM0YyXkIBBPXInu8JFVSTCbsy4t9Kde1ngUX8BGFz
|
||||
# iQYAbowPPJDs2OscMF8Y5gcjTiltoMwZlSNrlQGSNtQnicEkcJsXo5SXPbAZ2fCj
|
||||
# kYgQnPXOTOux40RjWtnLt7QvNFmGPP5pCiBAadxy0gFN6a+Y6mgBh1gH9gT+q1qr
|
||||
# vDHmWJOpGRElkEUVb7fay9uSoD+brnbWWSviHK81
|
||||
# SIG # End signature block
|
69
vAI-Talks/Scripts/activate
Normal file
@ -0,0 +1,69 @@
|
||||
# This file must be used with "source bin/activate" *from bash*
|
||||
# you cannot run it directly
|
||||
|
||||
deactivate () {
|
||||
# reset old environment variables
|
||||
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
|
||||
PATH="${_OLD_VIRTUAL_PATH:-}"
|
||||
export PATH
|
||||
unset _OLD_VIRTUAL_PATH
|
||||
fi
|
||||
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
|
||||
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
|
||||
export PYTHONHOME
|
||||
unset _OLD_VIRTUAL_PYTHONHOME
|
||||
fi
|
||||
|
||||
# This should detect bash and zsh, which have a hash command that must
|
||||
# be called to get it to forget past commands. Without forgetting
|
||||
# past commands the $PATH changes we made may not be respected
|
||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
||||
hash -r 2> /dev/null
|
||||
fi
|
||||
|
||||
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
||||
PS1="${_OLD_VIRTUAL_PS1:-}"
|
||||
export PS1
|
||||
unset _OLD_VIRTUAL_PS1
|
||||
fi
|
||||
|
||||
unset VIRTUAL_ENV
|
||||
unset VIRTUAL_ENV_PROMPT
|
||||
if [ ! "${1:-}" = "nondestructive" ] ; then
|
||||
# Self destruct!
|
||||
unset -f deactivate
|
||||
fi
|
||||
}
|
||||
|
||||
# unset irrelevant variables
|
||||
deactivate nondestructive
|
||||
|
||||
VIRTUAL_ENV="C:\Users\riraa\PycharmProjects\AI-Talks\vAI-Talks"
|
||||
export VIRTUAL_ENV
|
||||
|
||||
_OLD_VIRTUAL_PATH="$PATH"
|
||||
PATH="$VIRTUAL_ENV/Scripts:$PATH"
|
||||
export PATH
|
||||
|
||||
# unset PYTHONHOME if set
|
||||
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
||||
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
||||
if [ -n "${PYTHONHOME:-}" ] ; then
|
||||
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
|
||||
unset PYTHONHOME
|
||||
fi
|
||||
|
||||
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
||||
_OLD_VIRTUAL_PS1="${PS1:-}"
|
||||
PS1="(vAI-Talks) ${PS1:-}"
|
||||
export PS1
|
||||
VIRTUAL_ENV_PROMPT="(vAI-Talks) "
|
||||
export VIRTUAL_ENV_PROMPT
|
||||
fi
|
||||
|
||||
# This should detect bash and zsh, which have a hash command that must
|
||||
# be called to get it to forget past commands. Without forgetting
|
||||
# past commands the $PATH changes we made may not be respected
|
||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
||||
hash -r 2> /dev/null
|
||||
fi
|
34
vAI-Talks/Scripts/activate.bat
Normal file
@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
|
||||
rem This file is UTF-8 encoded, so we need to update the current code page while executing it
|
||||
for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do (
|
||||
set _OLD_CODEPAGE=%%a
|
||||
)
|
||||
if defined _OLD_CODEPAGE (
|
||||
"%SystemRoot%\System32\chcp.com" 65001 > nul
|
||||
)
|
||||
|
||||
set VIRTUAL_ENV=C:\Users\riraa\PycharmProjects\AI-Talks\vAI-Talks
|
||||
|
||||
if not defined PROMPT set PROMPT=$P$G
|
||||
|
||||
if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT%
|
||||
if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
|
||||
|
||||
set _OLD_VIRTUAL_PROMPT=%PROMPT%
|
||||
set PROMPT=(vAI-Talks) %PROMPT%
|
||||
|
||||
if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
|
||||
set PYTHONHOME=
|
||||
|
||||
if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
|
||||
if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%
|
||||
|
||||
set PATH=%VIRTUAL_ENV%\Scripts;%PATH%
|
||||
set VIRTUAL_ENV_PROMPT=(vAI-Talks)
|
||||
|
||||
:END
|
||||
if defined _OLD_CODEPAGE (
|
||||
"%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
|
||||
set _OLD_CODEPAGE=
|
||||
)
|
BIN
vAI-Talks/Scripts/bokeh.exe
Normal file
22
vAI-Talks/Scripts/deactivate.bat
Normal file
@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
|
||||
if defined _OLD_VIRTUAL_PROMPT (
|
||||
set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
|
||||
)
|
||||
set _OLD_VIRTUAL_PROMPT=
|
||||
|
||||
if defined _OLD_VIRTUAL_PYTHONHOME (
|
||||
set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
|
||||
set _OLD_VIRTUAL_PYTHONHOME=
|
||||
)
|
||||
|
||||
if defined _OLD_VIRTUAL_PATH (
|
||||
set "PATH=%_OLD_VIRTUAL_PATH%"
|
||||
)
|
||||
|
||||
set _OLD_VIRTUAL_PATH=
|
||||
|
||||
set VIRTUAL_ENV=
|
||||
set VIRTUAL_ENV_PROMPT=
|
||||
|
||||
:END
|
BIN
vAI-Talks/Scripts/f2py.exe
Normal file
BIN
vAI-Talks/Scripts/gtts-cli.exe
Normal file
BIN
vAI-Talks/Scripts/jsonschema.exe
Normal file
BIN
vAI-Talks/Scripts/markdown-it.exe
Normal file
BIN
vAI-Talks/Scripts/normalizer.exe
Normal file
BIN
vAI-Talks/Scripts/openai.exe
Normal file
BIN
vAI-Talks/Scripts/pip.exe
Normal file
BIN
vAI-Talks/Scripts/pip3.10.exe
Normal file
BIN
vAI-Talks/Scripts/pip3.exe
Normal file
BIN
vAI-Talks/Scripts/pygmentize.exe
Normal file
BIN
vAI-Talks/Scripts/python.exe
Normal file
BIN
vAI-Talks/Scripts/pythonw.exe
Normal file
16
vAI-Talks/Scripts/streamlit.cmd
Normal file
@ -0,0 +1,16 @@
|
||||
rem Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022)
|
||||
rem
|
||||
rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
rem you may not use this file except in compliance with the License.
|
||||
rem You may obtain a copy of the License at
|
||||
rem
|
||||
rem http://www.apache.org/licenses/LICENSE-2.0
|
||||
rem
|
||||
rem Unless required by applicable law or agreed to in writing, software
|
||||
rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
rem See the License for the specific language governing permissions and
|
||||
rem limitations under the License.
|
||||
|
||||
@echo OFF
|
||||
python -m streamlit %*
|
BIN
vAI-Talks/Scripts/streamlit.exe
Normal file
BIN
vAI-Talks/Scripts/tqdm.exe
Normal file
BIN
vAI-Talks/Scripts/watchmedo.exe
Normal file
5
vAI-Talks/etc/jupyter/nbconfig/notebook.d/pydeck.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"load_extensions": {
|
||||
"pydeck/extension": true
|
||||
}
|
||||
}
|
3
vAI-Talks/pyvenv.cfg
Normal file
@ -0,0 +1,3 @@
|
||||
home = C:\Users\riraa\AppData\Local\Programs\Python\Python310
|
||||
include-system-site-packages = false
|
||||
version = 3.10.9
|
@ -0,0 +1,15 @@
|
||||
/* eslint-disable */
|
||||
define(function() {
|
||||
'use strict';
|
||||
requirejs.config({
|
||||
map: {
|
||||
'*': {
|
||||
'@deck.gl/jupyter-widget': 'nbextensions/pydeck/index'
|
||||
}
|
||||
}
|
||||
});
|
||||
// Export the required load_ipython_extension function
|
||||
return {
|
||||
load_ipython_extension: function() {}
|
||||
};
|
||||
});
|