from upsonic import Agent, Task, KnowledgeBase
from upsonic.loaders.pdf import PdfLoader
from upsonic.loaders.markdown import MarkdownLoader
from upsonic.loaders.config import PdfLoaderConfig, MarkdownLoaderConfig
from upsonic.text_splitter.recursive import RecursiveChunker, RecursiveChunkingConfig
from upsonic.text_splitter.semantic import SemanticChunker, SemanticChunkingConfig
from upsonic.embeddings import OpenAIEmbedding, OpenAIEmbeddingConfig
from upsonic.vectordb import ChromaProvider, ChromaConfig, ConnectionConfig, Mode
# Setup dependencies
embedding = OpenAIEmbedding(OpenAIEmbeddingConfig())
vectordb = ChromaProvider(ChromaConfig(
collection_name="my_kb",
vector_size=1536,
connection=ConnectionConfig(mode=Mode.EMBEDDED, db_path="./chroma_db")
))
# Different loader for each source
loaders = [
PdfLoader(PdfLoaderConfig()),
MarkdownLoader(MarkdownLoaderConfig()),
PdfLoader(PdfLoaderConfig())
]
# Different splitter for each source
splitters = [
RecursiveChunker(RecursiveChunkingConfig(chunk_size=512)),
SemanticChunker(SemanticChunkingConfig(embedding_provider=embedding)),
RecursiveChunker(RecursiveChunkingConfig(chunk_size=1024))
]
kb = KnowledgeBase(
sources=["doc1.pdf", "guide.md", "doc2.pdf"],
embedding_provider=embedding,
vectordb=vectordb,
loaders=loaders, # Index 0 -> doc1.pdf, Index 1 -> guide.md, Index 2 -> doc2.pdf
splitters=splitters # Index 0 -> doc1.pdf, Index 1 -> guide.md, Index 2 -> doc2.pdf
)
# Use with Agent
agent = Agent("openai/gpt-4o")
task = Task(
description="What are the dependencies listed in the markdown file versus the build script?",
context=[kb]
)
result = agent.do(task)
print(result)