Spaces:
Sleeping
Sleeping
File size: 2,643 Bytes
68ed2d8 3546e99 68ed2d8 4c8c543 eb39769 835ee70 4c8c543 68ed2d8 3546e99 68ed2d8 3546e99 68ed2d8 835ee70 4c8c543 3546e99 68ed2d8 4c8c543 68ed2d8 4c8c543 3546e99 4c8c543 3546e99 4c8c543 3546e99 68ed2d8 3546e99 4c8c543 68ed2d8 eb39769 68ed2d8 eb39769 68ed2d8 3546e99 68ed2d8 3546e99 68ed2d8 4c8c543 3546e99 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
import os
import gradio as gr
from llama_index import VectorStoreIndex, SimpleDirectoryReader, SummaryIndex
from llama_index.readers import SimpleWebPageReader
from llama_index.llms import MistralAI
from llama_index.embeddings import MistralAIEmbedding
from llama_index import ServiceContext
from llama_index.query_engine import RetrieverQueryEngine
title = "Gaia Mistral Chat RAG URL Demo"
description = "Example of an assistant with Gradio, RAG from url and Mistral AI via its API"
placeholder = "Vous pouvez me posez une question sur ce contexte, appuyer sur Entrée pour valider"
placeholder_url = "Extract text from this url"
llm_model = 'mistral-small'
# choose api_key from .env or from input field
# placeholder_api_key = "API key"
env_api_key = os.environ.get("MISTRAL_API_KEY")
query_engine = None
with gr.Blocks() as demo:
gr.Markdown(""" ### Welcome to Gaia Level 2 Demo
Add an URL at the bottom of the interface before interacting with the Chat.
This demo allows you to interact with a webpage and then ask questions to Mistral APIs.
Mistral will answer with the context extracted from the webpage.
""")
# with gr.Row():
# api_key_text_box = gr.Textbox(placeholder=placeholder_api_key, container=False, scale=7)
def setup_with_url(url):
global query_engine
# Set-up clients
llm = MistralAI(api_key=env_api_key,model=llm_model)
embed_model = MistralAIEmbedding(model_name='mistral-embed', api_key=env_api_key)
service_context = ServiceContext.from_defaults(chunk_size=1024, llm=llm, embed_model=embed_model)
# Set-up db
documents = SimpleWebPageReader(html_to_text=True).load_data([url])
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
query_engine = index.as_query_engine(similarity_top_k=15)
return placeholder
gr.Markdown(""" ### 1 / Extract data from URL """)
with gr.Row():
url_msg = gr.Textbox(placeholder=placeholder_url, container=False, scale=7)
url_btn = gr.Button(value="Process url ✅", interactive=True)
url_btn.click(setup_with_url, [url_msg], url_msg, show_progress= "full")
gr.Markdown(""" ### 2 / Ask a question about this context """)
chatbot = gr.Chatbot()
msg = gr.Textbox(placeholder=placeholder)
clear = gr.ClearButton([msg, chatbot])
def respond(message, chat_history):
response = query_engine.query(message)
chat_history.append((message, str(response)))
return chat_history
msg.submit(respond, [msg, chatbot], [chatbot])
demo.title = title
demo.launch() |