# import libraries import streamlit as st from colivara_py import Colivara import base64 from PIL import Image from io import BytesIO import os API_KEY = os.getenv("COLIVARA_API_KEY") if "search_results" not in st.session_state: st.session_state["search_results"] = [] client = Colivara(api_key=API_KEY) # Add badges at the top of the page st.markdown( """
Discord Website Docs GitHub
""", unsafe_allow_html=True, ) # Ask for API key from user st.title("Colivara Demo") st.markdown( """ ### Welcome to the Colivara Search Demo This demo allows you to search through the Competitive Programmer's Handbook by Antti Laaksonen. We included 12 chapters from the handbook in this demo to help you understand how Colivara works. **Chapters Covered:** `Introduction` `Time Complexity` `Sorting` `Data Structures` `Complete Search` `Greedy Algorithms` `Dynamic Programming` `Amortized Analysis` `Range Queries` `Bit Manipulation` `Basics of Graphs` `Graph Traversal` - Enter a search query in the input box below. - Retrieve the most relevant pages from the document. **Example Queries:** ``` 1. What is set theory? 2. How to analyze complexity using Big O notation? 3. Explain Binary Search Algorithm and provide implementation of lower bound. 4. How to use Stack, Queue and Deque? 5. Explain generating permutations and subsets in Complete Search. 6. What makes an algorithm greedy? 7. How to solve the coin change problem using Dynamic Programming? 8. What is amortized analysis? 9. How to implement prefix sum array? 10. Explain basic bitwise operations. 11. Show graph representation using matrix and adjacency list. 12. How to implement DFS and BFS traversal? ``` Try it out and see how the AI retrieves the information you need efficiently. """ ) # Display placeholder for document details with a badge for the PDF st.markdown( """ #### Document Overview: **Title:** Competitive Programmer's Handbook **Author:** Antti Laaksonen **Type:** PDF **Included Pages:** 100+ **Included Chapters Count:** 12 **Full Book Chapters Count:** 30 View PDF """, unsafe_allow_html=True, ) # Search and retrieve documents st.subheader("Search and Retrieve Documents") # User inputs for search query = st.text_input( "Enter your search query:", help="Type a query to search through 12 chapters of the Competitive Programmer's Handbook.", ) top_k = st.slider( "Number of Top Documents to Retrieve", min_value=1, max_value=10, value=3, help="Select the number of top pages to retrieve.", ) collection_name = "Algorithm" if st.button("Search"): if not query: st.error("Please enter a search query to retrieve results.") else: with st.spinner("Searching..."): try: results = client.search( query=query, collection_name=collection_name, top_k=top_k ) st.session_state["search_results"] = results.results except Exception as e: st.error(f"Error during search: {str(e)}") # Display search results if "search_results" in st.session_state and st.session_state["search_results"]: st.write("### Search Results") # Remove the columns and display images one by one for idx, result in enumerate(st.session_state["search_results"]): img_base64 = result.img_base64 page_number = result.page_number document_name = result.document_name img = Image.open(BytesIO(base64.b64decode(img_base64))) # Create a container for each result with st.container(): # Display the image with increased width st.image( img, caption=f"Document: {document_name}, Page: {page_number}", use_container_width=True, # This makes the image use full column width ) # Add some spacing between images st.markdown("---") st.success("Search completed successfully.") st.markdown("----") st.markdown( """
Developed by Abdulhaleem @ TJM Labs
""", unsafe_allow_html=True, )