diff --git a/examples/sadhguru-ai/README.md b/examples/sadhguru-ai/README.md new file mode 100644 index 00000000..d3012d97 --- /dev/null +++ b/examples/sadhguru-ai/README.md @@ -0,0 +1,19 @@ +## Sadhguru AI + +This directory contains the code used to implement [Sadhguru AI](https://sadhguru-ai.streamlit.app/) using Embedchain. + +## Run locally + +You can run Sadhguru AI locally as a streamlit app using the following command: + +```bash +export OPENAI_API_KEY=sk-xxx +pip install -r requirements.txt +streamlit run app.py +``` + +Note: Remember to set your `OPENAI_API_KEY`. + +## Deploy to production + +You can create your own Sadhguru AI or similar RAG applications in production using one of the several deployment methods provided in [our docs](https://docs.embedchain.ai/get-started/deployment). diff --git a/examples/sadhguru-ai/app.py b/examples/sadhguru-ai/app.py new file mode 100644 index 00000000..52df1da6 --- /dev/null +++ b/examples/sadhguru-ai/app.py @@ -0,0 +1,95 @@ +import csv +import queue +import threading + +import streamlit as st + +from embedchain import Pipeline as App +from embedchain.config import BaseLlmConfig +from embedchain.helpers.callbacks import (StreamingStdOutCallbackHandlerYield, + generate) + + +@st.cache_resource +def sadhguru_ai(): + app = App() + return app + + +# Function to read the CSV file row by row +def read_csv_row_by_row(file_path): + with open(file_path, mode="r", newline="", encoding="utf-8") as file: + csv_reader = csv.DictReader(file) + for row in csv_reader: + yield row + + +@st.cache_resource +def add_data_to_app(): + app = sadhguru_ai() + file_path = "data.csv" + for row in read_csv_row_by_row(file_path): + app.add(row["url"], data_type="web_page") + + +app = sadhguru_ai() +add_data_to_app() + +assistant_avatar_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Sadhguru-Jaggi-Vasudev.jpg/640px-Sadhguru-Jaggi-Vasudev.jpg" # noqa: E501 + + +st.title("🙏 Sadhguru AI") + +styled_caption = '

🚀 An Embedchain app powered with Sadhguru\'s wisdom!

' # noqa: E501 +st.markdown(styled_caption, unsafe_allow_html=True) # noqa: E501 + +if "messages" not in st.session_state: + st.session_state.messages = [ + { + "role": "assistant", + "content": """ + Hi, I'm Sadhguru AI! I'm a mystic, yogi, visionary, and spiritual master. I'm here to answer your questions about life, the universe, and everything. + """, # noqa: E501 + } + ] + +for message in st.session_state.messages: + role = message["role"] + with st.chat_message(role, avatar=assistant_avatar_url if role == "assistant" else None): + st.markdown(message["content"]) + +if prompt := st.chat_input("Ask me anything!"): + with st.chat_message("user"): + st.markdown(prompt) + st.session_state.messages.append({"role": "user", "content": prompt}) + + with st.chat_message("assistant", avatar=assistant_avatar_url): + msg_placeholder = st.empty() + msg_placeholder.markdown("Thinking...") + full_response = "" + + q = queue.Queue() + + def app_response(result): + config = BaseLlmConfig(stream=True, callbacks=[StreamingStdOutCallbackHandlerYield(q)]) + answer, citations = app.chat(prompt, config=config, citations=True) + result["answer"] = answer + result["citations"] = citations + + results = {} + thread = threading.Thread(target=app_response, args=(results,)) + thread.start() + + for answer_chunk in generate(q): + full_response += answer_chunk + msg_placeholder.markdown(full_response) + + thread.join() + answer, citations = results["answer"], results["citations"] + if citations: + full_response += "\n\n**Sources**:\n" + for i, citations in enumerate(citations): + full_response += f"{i+1}. {citations[1]}\n" + + msg_placeholder.markdown(full_response) + st.session_state.messages.append({"role": "assistant", "content": full_response}) diff --git a/examples/sadhguru-ai/data.csv b/examples/sadhguru-ai/data.csv new file mode 100644 index 00000000..1011b353 --- /dev/null +++ b/examples/sadhguru-ai/data.csv @@ -0,0 +1,50 @@ +data_type,url,topic +Article,https://isha.sadhguru.org/in/en/wisdom/article/divorce-remarriage,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/parenting-for-teenager,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/find-fulfillment-in-life,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/women-pursue-career,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/child-no-need-instruction-manual,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/sadhuru-most-popular-blogs-2018,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/children-connect-nature,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/family-matters,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/how-should-parents-influence-lives,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/why-youth-turning-to-alcohol-drugs,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/self-doubt-growth-pangs,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/how-much-freedom-for-kids,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/how-chakras-form-in-fetus,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/attention-deficit-disorder,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/creating-right-atmosphere-children-flower,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/fathers-sons-karan-johar-conversation-sadhguru,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/disability-not-take-away-joy,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/when-parents-quarrel-what-do-you-do,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/mother-in-law-demystified,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/childlessness-bad-omen-or-blessing,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/parenting-without-nonsense,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/education-not-production-line,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/6-tips-to-be-a-truly-great-parent,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/dont-have-one-more,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/sadhgurus-message-to-parents-students-and-teachers,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/a-solution-for-generational-clash,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/education-without-competition,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/do-children-with-disabilities-suffer,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/a-sense-of-wonder,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/5-sadhguru-quotes-on-national-youth-day,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/when-a-child-comes-a-webcomic,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/childrens-day-5-awesome-activities-for-you-your-kids,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/rethinking-education-systems,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/3-back-to-school-tips-for-parents,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/children-discipline-best-way,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/colonel-mn-rai-people-applaud-even-curtains-fall,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/parenting-advice-skills,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/consigli-ai-genitori-per-far-fiorire-i-figli,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/what-is-the-best-kind-of-parenting,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/love-your-kids-liberate-them,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/sadhguru-on-relationships,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/are-you-ready-to-become-a-parent,Parenting +Article,https://isha.sadhguru.org/in/en/wisdom/article/mahabharat-ep74-what-does-it-take-to-bless-or-curse-someone,Mahabharat +Article,https://isha.sadhguru.org/in/en/wisdom/article/mahabharat-ep73-king-and-nagas-story-of-retribution-revenge,Mahabharat +Article,https://isha.sadhguru.org/in/en/wisdom/article/mahabharat-ep72-heaven-or-hell-yudhishthira-makes-unusual-choice,Mahabharat +Article,https://isha.sadhguru.org/in/en/wisdom/article/mahabharat-ep71-draupadi-pandavas-after-kurukshetra-war,Mahabharat +Article,https://isha.sadhguru.org/in/en/wisdom/article/mahabharat-ep70-why-karnas-talent-went-waste,Mahabharat +Article,https://isha.sadhguru.org/in/en/wisdom/article/mahabharat-ep69-devotion-have-place-today,Mahabharat +Article,https://isha.sadhguru.org/in/en/wisdom/article/mahabharat-ep-68-cyclical-existence-karma,Mahabharat diff --git a/examples/sadhguru-ai/requirements.txt b/examples/sadhguru-ai/requirements.txt new file mode 100644 index 00000000..bba32905 --- /dev/null +++ b/examples/sadhguru-ai/requirements.txt @@ -0,0 +1,3 @@ +embedchain +streamlit +pysqlite3-binary \ No newline at end of file