import os from pathlib import Path from upsonic import Agent, Task, KnowledgeBase from upsonic.embeddings import OpenAIEmbedding from upsonic.vectordb import QdrantProvider from upsonic.vectordb.config import Config, CoreConfig, ProviderName, Mode from upsonic.text_splitter.recursive import RecursiveChunker, RecursiveChunkingConfig from upsonic.loaders.text import TextLoader from upsonic.loaders.config import TextLoaderConfig # Create embedding provider embedding_provider = OpenAIEmbedding() # Create vector database configuration config = Config( core=CoreConfig( provider_name=ProviderName.QDRANT, mode=Mode.EMBEDDED, db_path="./knowledge_vectors", collection_name="company_knowledge", vector_size=1536, recreate_if_exists=False ) ) vectordb = QdrantProvider(config) # Create custom components loader_config = TextLoaderConfig( strip_whitespace=True, min_chunk_length=50 ) loader = TextLoader(loader_config) splitter_config = RecursiveChunkingConfig( chunk_size=1000, chunk_overlap=200, separators=["\n\n", "\n", ". ", "? ", "! ", " ", ""] ) splitter = RecursiveChunker(splitter_config) # Create knowledge base knowledge_base = KnowledgeBase( sources=["company_docs/", "policies.txt", "Our company values innovation and customer satisfaction."], embedding_provider=embedding_provider, vectordb=vectordb, loaders=[loader], splitters=[splitter], use_case="rag_retrieval", quality_preference="balanced", name="Company Knowledge Base" ) # Create agent and task agent = Agent(name="Company Assistant") task = Task( description="What are our company's core values and how do they influence our policies?", context=[knowledge_base] ) # Execute task result = agent.print_do(task) print("=== KNOWLEDGE BASE SUMMARY ===") print(f"Knowledge Base: {knowledge_base.name}") print(f"Knowledge ID: {knowledge_base.knowledge_id}") print(f"Sources: {len(knowledge_base.sources)}") print(f"Loaders: {len(knowledge_base.loaders)}") print(f"Splitters: {len(knowledge_base.splitters)}") print("\n=== TASK RESULT ===") print(result)