Spaces:
Paused
Paused
| """ | |
| Emerald-RAG: A Retrieval-Augmented Generation system for Pokémon Emerald. | |
| This module serves as the entry point for the Hugging Face Space, | |
| handling the Gradio/Streamlit UI and orchestrating the RAG pipeline | |
| to answer queries based on the game's mechanics and manual. | |
| """ | |
| import gradio as gr | |
| from helpers import create_prompt, find_similar_documents, load_vector_store | |
| from model import CHAT_MODEL_ID, generate_answer, load_chat_model | |
| import pytest | |
| import sys | |
| # Trigger tests on start up. | |
| retcode = pytest.main(["tests/"]) | |
| if retcode != 0: | |
| print("Tests failed!") | |
| else: | |
| print("Tests passed!") | |
| # Initialiations and globals | |
| print(f"Loading {CHAT_MODEL_ID} model...") | |
| chat_model, tokenizer = load_chat_model() | |
| print("Model loaded!") | |
| MANUAL_PATH = "emerald_manual.txt" | |
| print(f"Loading vector store from {MANUAL_PATH}...") | |
| vector_store = load_vector_store(MANUAL_PATH) | |
| print("Vector store loaded!") | |
| def respond(message, history): | |
| print("Enter app.respond...") | |
| context = find_similar_documents(vector_store, message) | |
| prompt = create_prompt(message, history, context) | |
| response = generate_answer(chat_model, tokenizer, prompt) | |
| if not response: | |
| return "Query failed. Please try again." | |
| formatted_output = f"**Answer:** {response.answer}\n\n" | |
| emoji = "✅" if response.confidence_score > 80 else "⚠️" | |
| formatted_output += f"**Confidence:** {response.confidence_score}% {emoji}\n\n" | |
| # 4. Add citations as a list of quotes | |
| formatted_output += "**Sources from Manual:**" | |
| for quote in response.citations: | |
| formatted_output += f"\n> *\"{quote}\"*\n" | |
| return formatted_output | |
| app = gr.ChatInterface( | |
| fn=respond, | |
| title="RAG system for Pokémon Emerald Q&A", | |
| description=( | |
| "Ask me anything about Pokémon Emerald mechanics, items, or walkthroughs! " | |
| "This high-precision Retrieval-Augmented Generation (RAG) system eliminates " | |
| "LLM hallucinations by grounding responses directly in an game reference " | |
| "manual ([link](https://gamefaqs.gamespot.com/gba/921905-pokemon-emerald-version/faqs/44694)). " | |
| "Built using [Mistral-Small-Instruct-2409](https://huggingface.co/mistralai/Mistral-Small-Instruct-2409), " | |
| "[nomic-ai/nomic-embed-text-v1.5](https://huggingface.co/nomic-ai/nomic-embed-text-v1.5), " | |
| "and a ChromaDB vector store, the pipeline outputs structured JSON complete with direct source citations " | |
| "and confidence scores." | |
| ), | |
| examples=[ | |
| "Where can I find a super rod?", | |
| "Who is the best starter pokemon in Emerald?", | |
| "What does the Mach Bike do?", | |
| "What are the most important items?" | |
| ], | |
| cache_examples=False, | |
| ) | |
| custom_css = """ | |
| .p, .md p { | |
| font-size: 16px !important; | |
| } | |
| .message-text { | |
| font-size: 16px !important; | |
| } | |
| .bubble-wrap { | |
| max-height: 400px !important; | |
| overflow-y: auto !important; | |
| } | |
| """ | |
| if __name__ == "__main__": | |
| app.launch(css=custom_css) |