import streamlit as st from llama_index.core import VectorStoreIndex from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.core.node_parser import SentenceSplitter from llama_index.core.ingestion import IngestionPipeline import chromadb from llama_index.vector_stores.chroma import ChromaVectorStore from llama_index.llms.ollama import Ollama from llama_index.llms.huggingface import HuggingFaceLLM from llama_index.core import Settings import time # Ustawienia strony st.title("Aplikacja z LlamaIndex") db = chromadb.PersistentClient(path="./abc") chroma_collection = db.get_or_create_collection("pomoc_ukrainie") vector_store = ChromaVectorStore(chroma_collection=chroma_collection) embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5", device="cpu") # Utwórz indeks index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model) # Utwórz silnik zapytań # Load the correct tokenizer and LLM from transformers import AutoTokenizer llm = HuggingFaceLLM( model_name="eryk-mazus/polka-1.1b", # Mały model 1.3B tokenizer=AutoTokenizer.from_pretrained("eryk-mazus/polka-1.1b"), device_map="auto" # model_kwargs={ # "quantization_config": quantization_config, # } ) #Query Engine query_engine = index.as_query_engine( llm=llm, response_mode='compact') # app gui # Store LLM generated responses if "messages" not in st.session_state.keys(): st.session_state.messages = [{"role": "assistant", "content": "Zadaj mi pytanie..."}] # Display chat messages for message in st.session_state.messages: with st.chat_message(message["role"]): st.write(message["content"]) # User-provided prompt if input := st.chat_input(): st.session_state.messages.append({"role": "user", "content": input}) with st.chat_message("user"): st.write(input) # Generate a new response if last message is not from assistant if st.session_state.messages[-1]["role"] != "assistant": with st.chat_message("assistant"): with st.spinner("Czekaj, odpowiedź jest generowana.."): start_time = time.time() # Start timing response = query_engine.query(input) end_time = time.time() # End timing generation_time = end_time - start_time # Zbuduj treść wiadomości z odpowiedzią i score content = str(response.response) # Upewnij się, że response jest stringiem if hasattr(response, 'source_nodes') and response.source_nodes: # Sprawdź, czy source_nodes istnieje # Dodaj score pierwszego węzła (jeśli istnieje) content += f"\nScore: {response.source_nodes[0].score:.4f}" # Dodaj score # Add generation time content += f"\nCzas generowania: {generation_time:.2f} sekund" st.write(content) # Wyświetl całą treść w Streamlit message = {"role": "assistant", "content": content} # Zapisz całą treść w wiadomości st.session_state.messages.append(message)