Appearance
SILVIA Core – ApiMem Reference
Version: 3.1
Namespace: CognitiveCode.Silvia.Api
The Modular Knowledge Architecture
The Innovation: Hot-Swappable Expert Brain Domains
Traditional AI: One Massive Model
EVERYTHING in one model:
- Medical knowledge
- Legal knowledge
- Technical support
- Company policies
- Product catalogs
- Customer service
↓
PROBLEMS:
- Can't update without retraining
- Can't segment by access level
- Can't swap contexts dynamically
- Huge memory footprint
- Slow inferenceSILVIA ApiMem: Composable Brain Modules
Base Brain (core_knowledge.slv)
↓
+ Medical Domain (medical_expert.slv) [Merge when needed]
+ Legal Domain (legal_expert.slv) [Merge when needed]
+ Technical Domain (tech_support.slv) [Merge when needed]
↓
CAPABILITIES:
✓ Load/unload domains at runtime
✓ Merge multiple expert brains
✓ Selective group enable/disable
✓ Tiered access per domain
✓ Minimal memory (only active knowledge)
✓ Fast context switchingThe Modular Brain System
Core Concept: Build AI Like Lego Bricks
Instead of one giant monolithic brain, SILVIA uses composable knowledge modules:
Enterprise Deployment Example:
core_base.slv ← Always loaded (greetings, navigation, errors)
├─ company_policies.slv ← Load for HR interactions
├─ product_catalog.slv ← Load for sales interactions
├─ tech_support.slv ← Load for support interactions
├─ executive_sops.slv ← Load for C-level users ONLY
└─ customer_training.slv ← Load for customer education
RESULT:
- Start with 5MB base brain
- Merge 50MB tech support when needed
- Unload tech, load 20MB product catalog
- Context switches in <1 second
- Total memory: 5MB + current domain (not 100MB everything)The Four-Layer Architecture:
- File Layer -
.slvbrain files (concepts + bindings + behaviors + scripts) - Merge Layer - Combine multiple brain files additively
- Group Layer - Enable/disable behavior groups without deleting
- Export Layer - Save selective groups back to files
This is the foundation for:
- Multi-tenant expert systems
- Tiered knowledge access
- Domain-specific AI agents
- Modular SOPs
- Hot-swappable contexts
Core API Methods
Brain File Operations
Load(string filename, bool merge, bool boot)
Loads or merges SILVIA brain file(s) into memory.
Purpose:
- Fresh Load: Replace current brain entirely (merge = false)
- Additive Merge: Add knowledge to existing brain (merge = true)
- Multi-File: Load multiple brains with pipe separator
| - Auto-Boot: Execute "boot" behavior after load (boot = true)
Usage:
csharp
SilviaApiMem mem = Core.ApiMem();
// Fresh load - replace entire brain
bool success = mem.Load("base_knowledge.slv", false, true);
// Merge additional domain knowledge
mem.Load("medical_expert.slv", true, false);
// Merge multiple brains at once
mem.Load("cars.slv|pets.slv|books.slv", true, false);Parameters:
filename(string): Path to brain file(s), pipe-separated for multiplemerge(bool): False = replace brain, True = merge additivelyboot(bool): True = execute "boot" behavior after load
Returns: bool - True if loaded successfully
Merge Behavior:
- Concepts: New concepts added, existing concepts unchanged
- Bindings: New bindings added, duplicate bindings ignored
- Behaviors:
- If Group+Name match → exuders/absorbers ADDED to existing behavior
- If Group+Name unique → new behavior created
- Scripts: New scripts added, conflicts resolved by order
Boot Behavior:
csharp
// If brain file contains behavior:
// Group: "system"
// Name: "boot"
// And boot = true:
// → "boot" behavior executes immediately after load
// → Use for initialization, setup, logging, etc.Save(string filename, string groups, bool SILVIA2 = false)
Saves current brain to file (full or selective groups).
Purpose:
- Full Save: Save entire brain (groups = "all" or null)
- Selective Save: Save only specific groups (groups = "group1|group2")
- Export Domains: Extract knowledge modules to separate files
- Backward Compat: SILVIA2 format for legacy systems
Usage:
csharp
// Save entire brain
mem.Save("complete_brain.slv", "all");
// Save only specific groups
mem.Save("medical_domain.slv", "medical|diagnosis|treatment");
// Save everything except one group (delete first, then save)
mem.GroupDelete("temp_data");
mem.Save("cleaned_brain.slv", "all");
// SILVIA2 format (legacy compatibility)
mem.Save("legacy_brain.slv", "all", true);Parameters:
filename(string): Path where brain file will be savedgroups(string): Pipe-separated group names, "all", or null for everythingSILVIA2(bool): True for SILVIA2 format compatibility (default false)
Returns: bool - True if saved successfully
What Gets Saved:
- Concepts: All concepts in selected groups + their bindings
- Behaviors: All behaviors in selected groups (absorbers, exuders, scripts)
- System Variables:
$_a(AI name) and other marked system vars - NOT Saved: Feedback memory, temporary variables, runtime state
Selective Save Strategy:
csharp
// Extract domain knowledge to separate files
mem.Save("domains/medical.slv", "medical|diagnosis");
mem.Save("domains/legal.slv", "legal|contracts");
mem.Save("domains/technical.slv", "technical|support");
// Now you have modular domain files for:
// - Separate version control
// - Independent updates
// - Selective deployment
// - Access controlMergeText(string files)
Merges SILVIA Expert Text files into brain.
Purpose:
- Human-Readable Format: Author behaviors in plain text (not binary .slv)
- Version Control: Git-friendly text format
- Collaborative Authoring: Easy for non-programmers
- Rapid Prototyping: Quick behavior additions without Studio
Expert Text Format:
//Comment: This is a greeting behavior
[conversation greeting]
@absorber hello
@absorber hi there
@absorber hey *
@reuse
@dynamic
@exuder Hello! How can I help you today?
@exuder Hi there! What can I do for you?Usage:
csharp
// Merge single expert text file
mem.MergeText("experts/greetings.txt");
// Merge multiple expert text files
mem.MergeText("experts/medical.txt|experts/legal.txt");Parameters:
files(string): Path(s) to expert text file(s), pipe-separated for multiple
Returns: bool - True if merged successfully
Expert Text Syntax:
// Comment line
^ concept relation bound_concept // Concept binding
[group subgroup name] // Behavior declaration
@absorber pattern text // Input pattern
@exuder response text // Output pattern
// Absorber flags
@exact // Require exact match
@reject // Rejection filter
@prompt // Mark as LLM prompt
@required 1,0,1 // Required concepts (1=required, 0=optional)
// Exuder flags
@dynamic // Enable dynamic generation
@reuse // Available for Markov sampling
@exact // Output exactly (no variation)See Also: ConvertBehaviorsToExpertText(), SaveExpertTextFile()
MergeAIML(string files)
Merges AIML (AI Markup Language) files into brain.
Purpose:
- Legacy Compatibility: Import classic chatbot data
- AIML Libraries: Leverage existing conversational datasets
- Quick Bootstrapping: Add conversational fallbacks
AIML to SILVIA Mapping:
xml
<!-- AIML -->
<category>
<pattern>HELLO *</pattern>
<template>Hi there!</template>
</category>
<!-- Becomes SILVIA Behavior: -->
Group: "aiml"
Name: "hello"
Absorber: "hello *"
Exuder: "Hi there!"Usage:
csharp
// Merge AIML conversational data
mem.MergeAIML("aiml/general.xml");
// Merge multiple AIML files
mem.MergeAIML("aiml/greetings.xml|aiml/smalltalk.xml");Parameters:
files(string): Path(s) to AIML file(s), pipe-separated for multiple
Returns: bool - True if merged successfully
Note: AIML is deprecated but supported for backward compatibility
Behavior Group Management
Groups are logical containers for organizing behaviors - the foundation of modular knowledge architecture.
GetAllGroups()
Returns all behavior groups in brain.
Usage:
csharp
string allGroups = mem.GetAllGroups();
// Returns: "conversation|support|medical|legal|errors"Returns: string - Pipe-separated list of all groups
GetActiveGroups(bool expand)
Returns currently active (enabled) behavior groups.
Purpose:
- Check Active Context: See what knowledge is currently loaded
- Wildcard Expansion: Resolve wildcard patterns to actual groups
Usage:
csharp
// Get active groups with wildcards
string active = mem.GetActiveGroups(false);
// Returns: "conversation|support*"
// Expand wildcards to actual groups
string expanded = mem.GetActiveGroups(true);
// Returns: "conversation|support_basic|support_advanced|support_expert"Parameters:
expand(bool): True to expand wildcards, false for raw format
Returns: string - Pipe-separated list of active groups
Wildcard Patterns:
support*→ all groups starting with "support"*medical→ all groups ending with "medical"*training*→ all groups containing "training"
GroupEnable(string groups)
Enables specified behavior groups (additive).
Purpose:
- Activate Knowledge: Turn on behaviors without reloading brain
- Context Switching: Add domain knowledge to current context
- Incremental Loading: Gradually add capabilities
Usage:
csharp
// Enable single group
mem.GroupEnable("medical");
// Enable multiple groups (additive)
mem.GroupEnable("medical|diagnosis|treatment");
// Already-enabled groups stay enabled
// Newly specified groups are added to active setParameters:
groups(string): Pipe-separated group names to enable
Returns: bool - True if enabled successfully
Additive Behavior:
csharp
// Start state: [conversation] active
mem.GroupEnable("support");
// Result: [conversation, support] active
mem.GroupEnable("medical");
// Result: [conversation, support, medical] activeGroupEnableOnly(string groups)
Enables ONLY specified groups, disables all others.
Purpose:
- Exclusive Context: Switch to specific knowledge domain
- Clean Slate: Replace entire active set
- Security: Limit to authorized knowledge only
Usage:
csharp
// Disable everything except medical domain
mem.GroupEnableOnly("medical|diagnosis|treatment");
// Switch to customer service context
mem.GroupEnableOnly("conversation|support|products");
// Enable everything
mem.GroupEnableOnly("*");Parameters:
groups(string): Pipe-separated group names (only these will be active)
Returns: bool - True if set successfully
Replacement Behavior:
csharp
// Current state: [conversation, support, medical] active
mem.GroupEnableOnly("legal");
// Result: [legal] active (all others disabled)GroupDisable(string groups)
Disables specified behavior groups.
Purpose:
- Unload Knowledge: Remove domain from active context
- Memory Optimization: Reduce active behavior count
- Context Restriction: Limit available responses
Usage:
csharp
// Disable single group
mem.GroupDisable("temp_test");
// Disable multiple groups
mem.GroupDisable("medical|legal|finance");Parameters:
groups(string): Pipe-separated group names to disable
Returns: bool - True if disabled successfully
Subtractive Behavior:
csharp
// Current state: [conversation, support, medical, legal] active
mem.GroupDisable("medical|legal");
// Result: [conversation, support] activeGroupIsEnabled(string group)
Checks if a specific group is currently enabled.
Usage:
csharp
if (mem.GroupIsEnabled("medical")) {
Console.WriteLine("Medical knowledge is active");
} else {
Console.WriteLine("Medical knowledge is disabled");
}Parameters:
group(string): Group name to check
Returns: bool - True if enabled, false if disabled
GroupExists(string group)
Checks if a group exists in the brain (enabled or disabled).
Usage:
csharp
if (mem.GroupExists("premium_features")) {
// Group is in brain (may be disabled)
mem.GroupEnable("premium_features");
} else {
// Need to load brain file containing this group
mem.Load("premium.slv", true, false);
}Parameters:
group(string): Group name to check
Returns: bool - True if group exists in brain
GroupDelete(string groups)
Permanently deletes behavior groups from memory.
Purpose:
- Remove Knowledge: Delete unwanted behaviors
- Cleanup: Remove test/temporary groups
- Memory Recovery: Free RAM by deleting unused groups
Usage:
csharp
// Delete single group
mem.GroupDelete("test_data");
// Delete multiple groups
mem.GroupDelete("temp|debug|old_version");Parameters:
groups(string): Pipe-separated group names to delete
Returns: bool - True if deleted successfully
Warning: This is permanent! Deleted groups cannot be recovered unless reloaded from file.
GroupSubgroupsDelete(string group, string subgroups)
Deletes specific subgroups within a parent group.
Purpose:
- Fine-Grained Cleanup: Remove specific sub-categories
- Partial Updates: Delete old subgroups before merging new ones
Usage:
csharp
// Delete specific subgroups from "medical" group
mem.GroupSubgroupsDelete("medical", "deprecated|old_protocols");Parameters:
group(string): Parent group namesubgroups(string): Pipe-separated subgroup names to delete
Returns: bool - True if deleted successfully
GroupDeleteExcept(string groups)
Deletes ALL groups EXCEPT the specified ones.
Purpose:
- Inverse Delete: Keep specific groups, remove everything else
- Context Reset: Start fresh with only core knowledge
Usage:
csharp
// Keep only core groups, delete everything else
mem.GroupDeleteExcept("conversation|errors|navigation");
// Remove all domain knowledge, keep base system
mem.GroupDeleteExcept("system|core");Parameters:
groups(string): Pipe-separated group names to KEEP (all others deleted)
Returns: bool - True if operation successful
Warning: This deletes everything NOT in the list!
Expert Text Conversion
Convert brain data to/from human-readable Expert Text format.
ConvertBehaviorsToExpertText(bool SILVIA2 = false)
Exports all behaviors to Expert Text format string.
Purpose:
- Documentation: Generate human-readable behavior documentation
- Version Control: Export to text for Git tracking
- Sharing: Share knowledge in readable format
- Backup: Text-based backup of brain content
Usage:
csharp
// Export all behaviors to Expert Text
string expertText = mem.ConvertBehaviorsToExpertText();
// Save to file
File.WriteAllText("exported_behaviors.txt", expertText);
// SILVIA2 format (legacy)
string legacyText = mem.ConvertBehaviorsToExpertText(true);Parameters:
SILVIA2(bool): True for SILVIA2 format compatibility
Returns: string - Expert Text representation of all behaviors
Output Format:
///SILVIA Expert Text Import Behaviors
//Conversation | Greeting
[conversation greeting]
@absorber hello
@absorber hi *
@dynamic
@reuse
@exuder Hello! How can I help you?
@exuder Hi there! What's up?
//Support | Technical Help
[support tech_help]
@exact
@absorber need help with *
@nodynamic
@exuder I can help with that. What specifically?ConvertConceptsToExpertText()
Exports all concepts and bindings to Expert Text format.
Purpose:
- Ontology Export: Document semantic network
- Knowledge Transfer: Share concept relationships
- Debugging: Visualize concept bindings
Usage:
csharp
// Export all concepts with bindings
string conceptsText = mem.ConvertConceptsToExpertText();
// Save to file
File.WriteAllText("exported_concepts.txt", conceptsText);Returns: string - Expert Text representation of all concepts
Output Format:
//SILVIA Expert Text Import Concepts
^tokyo location japan
^tokyo isa city
^tokyo property megacity
^japan location asia
^japan isa country
^programming isa skill
^programming relatedTo coding
^programming relatedTo softwareSaveExpertTextFile(string fileName, string path = "")
Saves import behaviors/concepts to Expert Text file.
Purpose:
- Programmatic Export: Save Expert Text from code
- Batch Processing: Generate multiple expert files
- Custom Path: Save to specific location
Usage:
csharp
// Prepare import data
mem._importBehaviors.Add(new SilviaImportBehavior(
"greetings", "", "hello",
"//Simple greeting behavior"
));
mem._importConcepts.Add(new SilviaImportConcept(
"hello", "greeting", "isa"
));
// Save to expert text file
bool saved = mem.SaveExpertTextFile("my_knowledge", "C:/exports/");
// Creates: C:/exports/my_knowledge.txtParameters:
fileName(string): Name of file (without extension)path(string): Directory path (defaults to desktop if empty)
Returns: bool - True if saved successfully
Modular Brain Architecture Patterns
Pattern 1: Tiered Expert System
Build AI with knowledge levels - different brains for different user tiers.
csharp
public class TieredExpertSystem {
private SilviaCore Core;
private SilviaApiMem mem;
public void LoadKnowledgeForUserLevel(int userLevel) {
mem = Core.ApiMem();
// Everyone gets base knowledge
mem.Load("base_knowledge.slv", false, true);
// Tier 1: Basic users
if (userLevel >= 1) {
mem.Load("basic_features.slv", true, false);
mem.GroupEnable("help|faq|navigation");
}
// Tier 2: Premium users
if (userLevel >= 2) {
mem.Load("premium_features.slv", true, false);
mem.GroupEnable("advanced_help|tutorials|insights");
}
// Tier 3: Enterprise users
if (userLevel >= 3) {
mem.Load("enterprise_features.slv", true, false);
mem.GroupEnable("api_docs|admin|analytics");
}
// Tier 4: Developers/Partners
if (userLevel >= 4) {
mem.Load("developer_docs.slv", true, false);
mem.GroupEnable("sdk|api_reference|integration_guides");
}
// Tier 5: Internal/Executives
if (userLevel >= 5) {
mem.Load("internal_sops.slv", true, false);
mem.Load("executive_reports.slv", true, false);
mem.GroupEnable("company_policies|financials|roadmap");
}
}
}
// Usage:
var system = new TieredExpertSystem();
system.LoadKnowledgeForUserLevel(3); // Enterprise user
// Result: Only knowledge appropriate for level 3 is loaded
// - No access to internal SOPs
// - No developer documentation clutter
// - Focused, relevant knowledge onlyPattern 2: Dynamic Domain Swapping
Hot-swap expert domains based on conversation context.
csharp
public class DynamicDomainSwitcher {
private SilviaCore Core;
private SilviaApiMem mem;
private string currentDomain = "";
public void SwitchDomain(string newDomain) {
if (currentDomain == newDomain) return;
mem = Core.ApiMem();
// Unload current domain (keep base)
if (!string.IsNullOrEmpty(currentDomain)) {
mem.GroupDisable(currentDomain + "*");
}
// Load and enable new domain
switch (newDomain.ToLower()) {
case "medical":
if (!mem.GroupExists("medical_diagnosis")) {
mem.Load("domains/medical.slv", true, false);
}
mem.GroupEnable("medical*");
break;
case "legal":
if (!mem.GroupExists("legal_contracts")) {
mem.Load("domains/legal.slv", true, false);
}
mem.GroupEnable("legal*");
break;
case "technical":
if (!mem.GroupExists("tech_support")) {
mem.Load("domains/technical.slv", true, false);
}
mem.GroupEnable("tech*");
break;
case "financial":
if (!mem.GroupExists("finance_analysis")) {
mem.Load("domains/financial.slv", true, false);
}
mem.GroupEnable("finance*");
break;
}
currentDomain = newDomain;
Console.WriteLine($"Switched to {newDomain} domain");
}
public void DetectAndSwitch(string userInput) {
// Auto-detect domain from keywords
if (userInput.Contains("diagnosis") || userInput.Contains("symptoms")) {
SwitchDomain("medical");
} else if (userInput.Contains("contract") || userInput.Contains("legal")) {
SwitchDomain("legal");
} else if (userInput.Contains("bug") || userInput.Contains("error code")) {
SwitchDomain("technical");
} else if (userInput.Contains("investment") || userInput.Contains("portfolio")) {
SwitchDomain("financial");
}
}
}
// Usage:
var switcher = new DynamicDomainSwitcher();
// User asks about medical topic
switcher.DetectAndSwitch("I have flu symptoms");
// → Auto-loads medical brain, disables others
// User asks about legal topic
switcher.DetectAndSwitch("I need a contract review");
// → Auto-loads legal brain, disables medicalPattern 3: Modular SOP System
Build Standard Operating Procedure library with selective access.
csharp
public class ModularSOPSystem {
private SilviaCore Core;
private SilviaApiMem mem;
public void BuildSOPLibrary() {
mem = Core.ApiMem();
// Save each department's SOPs to separate files
SaveDepartmentSOPs("hr", new string[] {
"onboarding", "offboarding", "benefits", "policies"
});
SaveDepartmentSOPs("engineering", new string[] {
"code_review", "deployment", "incident_response", "security"
});
SaveDepartmentSOPs("sales", new string[] {
"prospecting", "demo_workflow", "closing", "crm_usage"
});
SaveDepartmentSOPs("support", new string[] {
"ticket_triage", "escalation", "customer_comm", "sla_compliance"
});
}
private void SaveDepartmentSOPs(string dept, string[] sopGroups) {
// Save only this department's groups
string groupList = string.Join("|", sopGroups.Select(s => $"{dept}_{s}"));
mem.Save($"sops/{dept}_procedures.slv", groupList);
Console.WriteLine($"Saved {dept} SOPs: {groupList}");
}
public void LoadSOPsForEmployee(string department, string role) {
mem = Core.ApiMem();
// Load base SOPs (everyone)
mem.Load("sops/company_basics.slv", false, true);
// Load department-specific SOPs
mem.Load($"sops/{department}_procedures.slv", true, false);
mem.GroupEnable($"{department}*");
// Load role-specific SOPs
if (role == "manager") {
mem.Load("sops/management_sops.slv", true, false);
mem.GroupEnable("management*|reporting*");
}
if (role == "executive") {
mem.Load("sops/executive_sops.slv", true, false);
mem.GroupEnable("executive*|strategy*|board*");
}
Console.WriteLine($"Loaded SOPs for {role} in {department}");
}
}
// Usage:
var sops = new ModularSOPSystem();
// Build separate SOP files per department
sops.BuildSOPLibrary();
// Load SOPs for specific employee
sops.LoadSOPsForEmployee("engineering", "manager");
// → Gets: company basics + engineering SOPs + management SOPs
sops.LoadSOPsForEmployee("sales", "employee");
// → Gets: company basics + sales SOPs (no management access)Pattern 4: Multi-Product Knowledge Base
Manage separate product documentation with on-demand loading.
csharp
public class MultiProductKnowledgeBase {
private SilviaCore Core;
private SilviaApiMem mem;
private List<string> loadedProducts = new List<string>();
public void LoadProductKnowledge(string productId) {
mem = Core.ApiMem();
// Check if already loaded
if (loadedProducts.Contains(productId)) {
mem.GroupEnable($"product_{productId}*");
return;
}
// Load product brain
string brainFile = $"products/product_{productId}.slv";
if (File.Exists(brainFile)) {
mem.Load(brainFile, true, false);
loadedProducts.Add(productId);
Console.WriteLine($"Loaded knowledge for product {productId}");
}
}
public void UnloadProductKnowledge(string productId) {
mem = Core.ApiMem();
mem.GroupDisable($"product_{productId}*");
Console.WriteLine($"Unloaded knowledge for product {productId}");
}
public void AnswerProductQuestion(string productId, string question) {
// Ensure correct product knowledge is active
LoadProductKnowledge(productId);
// Disable other products for focused context
foreach (string otherProduct in loadedProducts) {
if (otherProduct != productId) {
mem.GroupDisable($"product_{otherProduct}*");
}
}
// Get response with only this product's knowledge
string[] response = Core.ApiBrain().GetResponseManaged(question);
if (response != null) {
Console.WriteLine($"[Product {productId}] {response[0]}");
}
}
}
// Usage:
var kb = new MultiProductKnowledgeBase();
// Customer asks about Product A
kb.AnswerProductQuestion("A", "How do I configure the settings?");
// → Loads Product A brain, disables others, responds with A-specific answer
// Customer switches to Product B
kb.AnswerProductQuestion("B", "What's the pricing?");
// → Disables Product A, loads Product B, responds with B-specific answer
// Memory efficient: Only active product brain enabled at oncePattern 5: Incremental Knowledge Loading
Progressive enhancement - load knowledge as conversation deepens.
csharp
public class IncrementalKnowledgeLoader {
private SilviaCore Core;
private SilviaApiMem mem;
private int conversationDepth = 0;
public void InitializeConversation() {
mem = Core.ApiMem();
// Level 0: Only basic conversational skills
mem.Load("level_0_basic.slv", false, true);
mem.GroupEnableOnly("greetings|navigation|errors");
conversationDepth = 0;
}
public void ProcessUserInput(string input) {
// Analyze input complexity
int requiredDepth = AnalyzeRequiredDepth(input);
// Load more knowledge if needed
while (conversationDepth < requiredDepth) {
conversationDepth++;
LoadLevel(conversationDepth);
}
// Get response with current knowledge level
string[] response = Core.ApiBrain().GetResponseManaged(input);
// ... process response
}
private int AnalyzeRequiredDepth(string input) {
// Simple heuristic: word count + technical terms
int wordCount = input.Split(' ').Length;
int techTerms = CountTechnicalTerms(input);
if (wordCount < 5 && techTerms == 0) return 0; // Basic
if (wordCount < 15 && techTerms < 3) return 1; // Intermediate
if (wordCount < 30 && techTerms < 5) return 2; // Advanced
return 3; // Expert
}
private void LoadLevel(int level) {
switch (level) {
case 1:
// Intermediate knowledge
mem.Load("level_1_intermediate.slv", true, false);
mem.GroupEnable("help|tutorials|faq");
Console.WriteLine("Loaded intermediate knowledge");
break;
case 2:
// Advanced knowledge
mem.Load("level_2_advanced.slv", true, false);
mem.GroupEnable("technical|apis|integration");
Console.WriteLine("Loaded advanced knowledge");
break;
case 3:
// Expert knowledge
mem.Load("level_3_expert.slv", true, false);
mem.GroupEnable("architecture|optimization|internals");
Console.WriteLine("Loaded expert knowledge");
break;
}
}
}
// Usage:
var loader = new IncrementalKnowledgeLoader();
loader.InitializeConversation(); // Start with minimal knowledge
loader.ProcessUserInput("Hi");
// → Level 0 (basic greetings)
loader.ProcessUserInput("How do I configure the API?");
// → Detects complexity, loads Level 1 & 2
loader.ProcessUserInput("Explain the internal architecture of the distributed cache layer");
// → Detects expert-level query, loads Level 3Expert Text Authoring
The SilviaExpertText Helper Class
Programmatic tools for creating Expert Text files.
Import Data Classes:
csharp
// Behavior container
SilviaImportBehavior behavior = new SilviaImportBehavior(
"support", // group
"technical", // subgroup
"troubleshoot", // name
"//Technical support" // comment
);
// Add absorbers
behavior.absorbers.Add(new SilviaImportAbsorber(
"I need help with *", // text
false, // exact
false, // reject
false, // prompt
null // required
));
// Add exuders
behavior.exuders.Add(new SilviaImportExuder(
"I can help with that. What's the issue?", // text
false, // exact
false, // dynamic
true, // reuse
false // prompt
));
// Convert to Expert Text
string expertText = SilviaExpertText.ConvertImportBehaviorsToExpertText(
new List<SilviaImportBehavior> { behavior }
);Concept binding:
csharp
// Create concept with bindings
SilviaImportConcept concept = new SilviaImportConcept(
"programming", // concept
"skill", // bound concept
"isa" // binding type
);
// Add more bindings
concept.AddBoundConcept("coding", "synonym");
concept.AddBoundConcept("software", "relatedTo");
// Convert to Expert Text
string conceptText = SilviaExpertText.ConvertImportConceptsToExpertText(
new List<SilviaImportConcept> { concept }
);Formatting utilities:
csharp
// Format text for Expert Text (adds spacing, handles punctuation)
string formatted = SilviaExpertText.FormatForSilviaExpertText(
"Hello there.How are you?", // input
true // nonbreaking sentences
);
// Returns: "Hello there ._How are you ?"
// Unformat (remove expert text formatting)
string normal = SilviaExpertText.UnformatFromSilviaExpertText(formatted);
// Returns: "Hello there. How are you?"
// Other utilities
string capitalized = SilviaExpertText.Capitalize1st("hello"); // "Hello"
bool startsVowel = SilviaExpertText.StartingVowel("apple"); // true
string nospaces = SilviaExpertText.Kill_Spaces("hello world"); // "hello_world"
string broken = SilviaExpertText.BreakCamelCase("HelloWorld"); // "Hello World"Advanced Patterns
Pattern 6: Version-Controlled Knowledge
Use Git for brain version control with Expert Text.
csharp
public class VersionControlledBrain {
private SilviaCore Core;
private SilviaApiMem mem;
public void ExportToGit() {
mem = Core.ApiMem();
// Export all behaviors to text (Git-friendly)
string behaviors = mem.ConvertBehaviorsToExpertText();
File.WriteAllText("knowledge/behaviors.txt", behaviors);
// Export all concepts to text
string concepts = mem.ConvertConceptsToExpertText();
File.WriteAllText("knowledge/concepts.txt", concepts);
// Now commit to Git
// git add knowledge/
// git commit -m "Update knowledge base"
// git push
}
public void ImportFromGit() {
mem = Core.ApiMem();
// Load base brain
mem.Load("base.slv", false, true);
// Merge expert text from Git
mem.MergeText("knowledge/behaviors.txt");
mem.MergeText("knowledge/concepts.txt");
// Save as binary brain
mem.Save("compiled_brain.slv", "all");
}
public void CreateFeatureBranch(string featureName) {
// Export current state
ExportToGit();
// Git: create feature branch
// git checkout -b feature/{featureName}
// Work on new behaviors
mem._importBehaviors.Add(new SilviaImportBehavior(
"feature", featureName, "main",
$"//Feature: {featureName}"
));
// Save feature to separate file
mem.SaveExpertTextFile($"feature_{featureName}", "knowledge/features/");
// Git: commit feature
// git add knowledge/features/
// git commit -m "Add feature: {featureName}"
}
}Pattern 7: A/B Testing Knowledge Variants
Test different brain versions for performance.
csharp
public class ABTestingBrains {
private SilviaCore CoreA;
private SilviaCore CoreB;
public void SetupABTest() {
// Variant A: Current production brain
CoreA = SilviaCoreManager.CreateCore("A");
CoreA.ApiMem().Load("production.slv", false, true);
// Variant B: Experimental brain
CoreB = SilviaCoreManager.CreateCore("B");
CoreB.ApiMem().Load("production.slv", false, true);
CoreB.ApiMem().Load("experimental_improvements.slv", true, false);
}
public string GetResponse(string input, string userId) {
// Route users to A or B based on ID
SilviaCore core = (userId.GetHashCode() % 2 == 0) ? CoreA : CoreB;
string[] response = core.ApiBrain().GetResponseManaged(input);
// Log for analysis
LogABTest(userId, core == CoreA ? "A" : "B", input, response[0]);
return response[0];
}
public void AnalyzeResults() {
// Analyze which variant performed better
// If B wins → promote to production
CoreB.ApiMem().Save("production_new.slv", "all");
}
}Best Practices
1. Modular Brain Design
csharp
// GOOD: Separate domains into files
base_knowledge.slv // Core (10MB)
├─ medical_domain.slv // Medical (50MB)
├─ legal_domain.slv // Legal (30MB)
└─ technical_domain.slv // Technical (40MB)
// Load only what's needed
mem.Load("base_knowledge.slv", false, true);
if (topic == "medical") {
mem.Load("medical_domain.slv", true, false);
}
// BAD: Everything in one file
giant_monolithic_brain.slv // Everything (130MB)
// Result: Always loads 130MB even if only need 10MB2. Group Naming Conventions
csharp
// GOOD: Hierarchical naming with wildcards
"medical_diagnosis_general"
"medical_diagnosis_specialist"
"medical_treatment_basic"
"medical_treatment_advanced"
// Enable all medical
mem.GroupEnable("medical*");
// Enable only diagnosis
mem.GroupEnable("medical_diagnosis*");
// BAD: Flat, inconsistent naming
"diagnosis"
"med_treat"
"medicine_advanced"
// Can't use wildcards effectively3. Selective Saving
csharp
// GOOD: Save domains separately
mem.Save("domains/medical.slv", "medical*");
mem.Save("domains/legal.slv", "legal*");
mem.Save("domains/tech.slv", "tech*");
// Update only one domain
mem.Load("domains/medical.slv", true, false);
// ... edit medical behaviors
mem.Save("domains/medical.slv", "medical*");
// BAD: Always save everything
mem.Save("brain.slv", "all");
// Result: Can't update individual domains4. Boot Behaviors
csharp
// GOOD: Use boot for initialization
// In brain file, create behavior:
// Group: "system"
// Name: "boot"
// Script (post): Initialize variables, log startup, etc.
mem.Load("brain.slv", false, true); // boot = true
// Automatically runs "boot" behavior
// BAD: Manual initialization after load
mem.Load("brain.slv", false, false);
InitializeManually(); // Forgot this once? System broken5. Expert Text Workflow
csharp
// GOOD: Use Expert Text for version control
// 1. Author behaviors in text (human-readable)
File.WriteAllText("behaviors.txt", expertText);
// 2. Version control the text
// git add behaviors.txt
// git commit -m "Add medical behaviors"
// 3. Compile to binary for deployment
mem.MergeText("behaviors.txt");
mem.Save("production.slv", "all");
// BAD: Binary files in Git
// git add brain.slv // Binary diff = uselessSee Also
- ApiBrain - Group management affects active behaviors for inference
- ApiCore - Save/load triggers modified flag
- ApiData - Create behaviors programmatically before saving
- ApiUser - Per-user brain persistence
© Copyright Cognitive Code Corp. 2007-2026
SILVIA is a registered Trademark of Cognitive Code Corp.

