#[0.15.0] - 2026-04-08
Major release introducing a pluggable embedding provider system, local LLM support via Ollama, and significant memory plugin enhancements including a knowledge graph layer, working memory, reinforcement learning, and content preprocessing.
#Added
-
Embedding Provider System (
daita/embeddings/)New module mirroring the
daita.llmpattern:BaseEmbeddingProviderabstract class, factory with registry, and five built-in providers. All providers include LRU caching and automatic tracing.- OpenAI —
text-embedding-3-small/text-embedding-3-large - Voyage AI —
voyage-3and variants - Gemini — Google embedding models
- Sentence Transformers — local HuggingFace models (no API key required)
- Mock — deterministic vectors for testing
pythonfrom daita.embeddings import create_embedding_provider embedder = create_embedding_provider("openai", model="text-embedding-3-small") vectors = await embedder.embed_texts(["hello", "world"])Register custom providers with
register_embedding_provider().BaseEmbeddingProvideris now exported from the top-leveldaitapackage.New
pyproject.tomlextras:voyage,sentence-transformers. - OpenAI —
-
Ollama LLM Provider (
daita/llm/ollama.py)Run agents against local models via Ollama's OpenAI-compatible API. Supports any model available through
ollama pull— llama3.1, mistral, gemma2, codestral, phi3, etc.pythonagent = Agent( name="local", llm_provider="ollama", llm_model="llama3.1", )Configurable via
OLLAMA_BASE_URLenvironment variable (default:http://localhost:11434/v1). Connection errors produce clear diagnostics, including a specific message when running in Daita Cloud where Ollama is unsupported. -
Memory Graph (
daita/plugins/memory/memory_graph.py)Lightweight knowledge graph layer over agent memories. Creates entity nodes from stored memories and connects them via relationships, enabling traversal queries like "what are all the infrastructure constraints for Project Orion?" that pure cosine similarity would miss.
- Extracts entities from LLM-produced facts (via
FactExtractor) or zero-LLM keyword heuristics (backtick code, capitalized phrases, table.column notation, quoted strings) - Entity quality filters exclude temporal phrases, currency amounts, bare numbers, and generic nouns
- BFS traversal with configurable depth for relationship discovery
- Uses the existing
GraphBackendinfrastructure withgraph_type='memory'
Enable with
enable_memory_graph=TrueonMemoryPlugin. Adds thetraverse_memoryandquery_factstools. - Extracts entities from LLM-produced facts (via
-
Working Memory (
daita/plugins/memory/working_memory.py)Session-scoped scratchpad — in-memory only, no disk, no embeddings, no API calls. Auto-evicted on agent stop unless explicitly promoted to long-term memory via
remember(promote_key=...).pythonmemory = MemoryPlugin(enable_working_memory=True) # Agent can call scratch("raw notes here", key="analysis") # and think("what patterns did I see?") to search the scratchpadEnable with
enable_working_memory=True. Addsscratchandthinktools. -
Memory Reinforcement Learning
Outcome-based feedback loop for memories. Agents can mark recalled memories as positive or negative, adjusting their effective scores in future recall. Enable with
enable_reinforcement=True. Adds thereinforcetool. -
Memory Content Preprocessor (
daita/plugins/memory/preprocessor.py)Splits raw content into two representations at ingestion: the original text for storage and a cleaned version for embedding/dedup/fact extraction. Strips code blocks, inline code, markdown formatting, and bullet prefixes so the embedding captures factual signal rather than formatting noise. Prevents structurally identical but factually different memories (e.g. two table schemas) from appearing as near-duplicates.
-
Memory Tool Tiers
MemoryPluginnow accepts atierparameter ("basic","analysis","full") controlling which tools are exposed to the agent. Thememory_toolsparameter allows explicit tool selection for fine-grained control. -
EmbeddingProvider Interface (
daita/core/interfaces.py)New
EmbeddingProviderabstract base class defining the contract:dimensionsproperty,embed_text(), andembed_texts(). -
Memory Plugin — Custom Embedder Injection
MemoryPluginnow accepts anembedderparameter — a pre-constructedBaseEmbeddingProviderinstance that takes precedence over theembedding_provider/embedding_modelstring parameters.
#Changed
-
Memory plugin tools extracted to standalone module (
daita/plugins/memory/memory_tools.py)All tool handler functions moved out of
MemoryPlugininto standalone functions that receive the plugin instance as their first argument, making them independently testable. -
Memory plugin search scoring improved (
daita/plugins/memory/search.py)Search module updated with revised scoring logic to integrate reinforcement signals and memory graph context.
-
Graph backend — new node/edge types
Added
MEMORYandENTITYnode types andMENTIONSedge type todaita/core/graph/models.pyfor the memory graph. -
Local graph backend expanded (
daita/core/graph/local_backend.py)Added
get_edges_from(),get_edges_to(), andget_all_nodes()methods required by memory graph traversal.
#Fixed
-
Memory dedup threshold now configurable
MemoryPluginacceptsdedup_threshold(default0.95) instead of using a hardcoded value, allowing tuning for domains where default similarity thresholds are too aggressive.