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)