Skip to content

SILVIA Core – ApiUser Reference

Version: 3.1

Namespace: CognitiveCode.Silvia.Api


Multi-User Management & Scalability With SILVIA

Single-Core Single-User

Single SilviaCore
└── User Session

Fully-Siloed Brain, no instancing or shared knowledgebase.

Single-Core Multi-User

Single SilviaCore
├── Shared Brain (1 instance)
└── UserManager
    ├── User "alice"    (variables, history, state)
    ├── User "bob"      (variables, history, state)
    ├── User "charlie"  (variables, history, state)
    └── ...
        └── User 10,000 (isolated data per user)

1 SILVIA Core can track thousands of users with isolated per-user data.


Hybrid Server Model

SilviaServer (10,000 cores)
    ├── Core 1 → 10,000 users per core
    ├── Core 2 → 10,000 users per core
    └── Core 10,000 → 10,000 users per core
        = 100,000,000 total users

Combine multi-instancing with per-Core user management for 100M+ user capacity.


Key Innovation: Optional Activation

User management is opt-in and zero-impact when disabled:

csharp
// Traditional mode (1 core = 1 user)
var core = SilviaCoreManager.CreateCore("user_alice", "brain.sil", true);
string response = core.ApiBrain().GetResponse(input, null);

// NEW 3.1: Enable internal multi-user tracking
SilviaUserAPI.Enable(core, 10000); // Support up to 10K users

// Now the same core handles multiple users
var alice = SilviaUserAPI.GetUser("alice");
alice.SetUserVariable("$name", "Alice");

var bob = SilviaUserAPI.GetUser("bob");
bob.SetUserVariable("$name", "Bob");

// Each user has isolated data, shared brain knowledge

Table of Contents

  1. Overview
  2. Architecture
  3. Quick Start
  4. SilviaUserAPI (Static Interface)
  5. SilviaUserManager
  6. SilviaUser
  7. User Variables
  8. Conversation History
  9. Feedback Management
  10. Memory & State Integration
  11. Session Management
  12. Persistence & Backup
  13. Resource Management
  14. Statistics & Monitoring
  15. Platform-Specific Integrations
  16. Best Practices

Overview

ApiUser provides enterprise-grade multi-user session management for SILVIA Core. It enables:

  • Per-User Data Isolation: Variables, conversations, feedback, memory
  • Massive Scalability: 10,000+ users per core
  • Zero Core Impact: Optional activation, no performance penalty when disabled
  • Thread-Safe Operations: Concurrent user access with lock-based safety
  • Comprehensive Persistence: Save/load user data, automatic backups
  • Resource Monitoring: Track memory, activity, health status

What Problems Does This Solve?

1. Memory Efficiency

Before 3.1: 10K users × 500MB brain = 5TB memory
With 3.1: 1 brain (500MB) + 10K user sessions (50MB) = 550MB memory

2. Hot-Reload Knowledge

Before: Update brain → restart 10K cores
With 3.1: Update brain once → all 10K users instantly see changes

3. Per-User Personalization

Before: Separate brain files per user
With 3.1: Shared knowledge + per-user variables

4. Enterprise Multi-Tenancy

Before: Complex load balancing across cores
With 3.1: Single core handles entire tenant


Architecture

Component Hierarchy

SilviaUserAPI (Static)

SilviaUserManager (Lifecycle)

SilviaUser (Data Container)
    ├── Variables (Key/Value)
    ├── Conversations (Input/Output/BehaviorID)
    ├── Feedback (Learning)
    ├── Memory (SilviaMemory)
    └── State (SilviaState)

Data Isolation Model

Each SilviaUser contains:

  • Variables: List<Tuple<string, string>> – Per-user settings
  • Conversations: List<Tuple<string, string, int, DateTime>> – Full history
  • Feedback: List<Tuple<string, string, DateTime>> – Learning data
  • Memory: SilviaMemory – Concept snapshots (future integration)
  • State: SilviaState – Event queues (future integration)

Thread Safety: All collections use lock() for concurrent access.


Quick Start

Basic Multi-User Setup

csharp
// 1. Create a core
var core = SilviaCoreManager.CreateCore("multi_user_core", "chatbot.sil", true);

// 2. Enable user management
SilviaUserAPI.Enable(core, 10000); // Max 10K users

// 3. Handle user requests
void HandleUserRequest(string userId, string input) {
    // Get or create user
    var user = SilviaUserAPI.GetUser(userId);
    
    // Set user-specific context
    user.SetUserVariable("$user_id", userId);
    user.SetUserVariable("$last_input", input);
    
    // Get AI response (shared brain)
    string response = core.ApiBrain().GetResponse(input, null);
    
    // Store conversation
    int behaviorId = core.ApiBrain().GetResponseBehaviorID(0);
    user.AddConversation(input, response, behaviorId);
    
    // Update activity
    SilviaUserAPI.TouchUser(userId);
    
    return response;
}

// Example usage
string response1 = HandleUserRequest("alice", "What's the weather?");
string response2 = HandleUserRequest("bob", "Tell me a joke");
string response3 = HandleUserRequest("alice", "And tomorrow?"); 
// Alice's context is preserved!

Advanced: Per-User Variables in Responses

csharp
// Enable user management
SilviaUserAPI.Enable(core);

// User "alice" sets preferences
var alice = SilviaUserAPI.GetUser("alice");
alice.SetUserVariable("$user_name", "Alice");
alice.SetUserVariable("$user_city", "San Francisco");
alice.SetUserVariable("$user_timezone", "PST");

// In SILVIA brain, use variables:
// Behavior: "greetings"
// Exuder: "Hello $user_name from $user_city!"

// When alice asks:
string response = core.ApiBrain().GetResponse("Hello", null);
// Response: "Hello Alice from San Francisco!"

// User "bob" gets different response:
var bob = SilviaUserAPI.GetUser("bob");
bob.SetUserVariable("$user_name", "Bob");
bob.SetUserVariable("$user_city", "New York");

string response2 = core.ApiBrain().GetResponse("Hello", null);
// Response: "Hello Bob from New York!"

SilviaUserAPI (Static Interface)

Simple on/off control for the entire user management system.

Enable

Activates user management system.

csharp
public static void Enable(SilviaCore core = null, uint maxUsers = 10000)

Parameters:

  • core – Optional SilviaCore reference for future integration
  • maxUsers – Maximum number of concurrent users (default 10,000)

Example:

csharp
// Basic activation
SilviaUserAPI.Enable(core);

// Custom user limit
SilviaUserAPI.Enable(core, 50000); // Support 50K users

Disable

Deactivates user management.

csharp
public static void Disable()

Example:

csharp
// Disable user tracking
SilviaUserAPI.Disable();

// User API calls now return null
var user = SilviaUserAPI.GetUser("alice"); // Returns: null

IsEnabled

Checks if user management is active.

csharp
public static bool IsEnabled()

Example:

csharp
if (SilviaUserAPI.IsEnabled()) {
    var user = SilviaUserAPI.GetUser(userId);
} else {
    // Fallback to single-user mode
}

GetUser

Gets or creates a user (lazy initialization).

csharp
public static SilviaUser GetUser(string identifier)

Returns: SilviaUser – User object, or null if disabled

Example:

csharp
// First call: Creates user
var user = SilviaUserAPI.GetUser("alice");

// Second call: Returns existing user
var sameUser = SilviaUserAPI.GetUser("alice");

// Different identifier: Creates new user
var bob = SilviaUserAPI.GetUser("bob");

TouchUser

Updates user's last activity timestamp.

csharp
public static bool TouchUser(string identifier)

Example:

csharp
// Track user activity
SilviaUserAPI.TouchUser("alice");

// Later: Check inactive users
var manager = SilviaUserAPI.GetManager();
int removed = manager.CleanupInactiveUsers(TimeSpan.FromDays(30));

GetSummary

Gets formatted statistics for monitoring.

csharp
public static string GetSummary()

Example:

csharp
string report = SilviaUserAPI.GetSummary();
Console.WriteLine(report);

// Output:
// === SILVIA User Management Summary ===
// Total Users: 1,247
// Max Users: 10,000
// Active (1h/1d/1w): 89/534/1,203
// Total Data Size: 12.43 MB
// Variable Data: 1.25 MB
// Conversation Data: 9.87 MB
// Feedback Data: 1.31 MB
// Total Sessions: 3,891

GetManager

Gets the full manager for advanced operations.

csharp
public static SilviaUserManager GetManager()

Example:

csharp
var manager = SilviaUserAPI.GetManager();

// Perform bulk operations
manager.SaveAllUserData("backup/");
var stats = manager.GetStatistics();
var health = manager.GetHealthStatus();

SilviaUserManager

Manages the lifecycle of all users.

Constructor

csharp
public SilviaUserManager(SilviaCore core, uint maxUsers = 10000)

Example:

csharp
// Usually created via SilviaUserAPI.Enable(), but can be manual:
var manager = new SilviaUserManager(core, 10000);

CreateUser

Creates a new user with optional data loading.

csharp
internal SilviaUser CreateUser(string identifier, string dataPath = null)

Parameters:

  • identifier – Unique user ID
  • dataPath – Optional path to load existing user data

Returns: SilviaUser – New or existing user

Example:

csharp
var manager = SilviaUserAPI.GetManager();

// Create new user
var user = manager.CreateUser("alice");

// Create user and load previous session
var returning = manager.CreateUser("bob", "user_data/bob.dat");

Behavior:

  • If user exists: Increments session count, updates timestamp
  • If new: Creates fresh user, optionally loads data
  • Thread-safe with lock(_users)

GetOrCreateUser

Gets existing user or creates if missing.

csharp
internal SilviaUser GetOrCreateUser(string identifier)

Example:

csharp
// Same as SilviaUserAPI.GetUser()
var user = manager.GetOrCreateUser("alice");

RemoveUser

Removes a user and optionally saves data.

csharp
public bool RemoveUser(string identifier, string savePath = null)

Example:

csharp
// Remove without saving
manager.RemoveUser("inactive_user");

// Remove and save data
manager.RemoveUser("departing_user", "archive/user_departing.dat");

GetUsersByPattern

Searches users by identifier pattern.

csharp
internal List<SilviaUser> GetUsersByPattern(string pattern)

Example:

csharp
// Find all admin users
var admins = manager.GetUsersByPattern("admin_");

// Find all users from organization
var orgUsers = manager.GetUsersByPattern("_acme_corp");

TouchUser

Updates last activity timestamp.

csharp
public bool TouchUser(string identifier)

Example:

csharp
// Track activity after each interaction
manager.TouchUser("alice");

GetActiveUsers

Gets users active within time window.

csharp
internal List<SilviaUser> GetActiveUsers(TimeSpan withinTime)

Example:

csharp
// Users active in last hour
var recentUsers = manager.GetActiveUsers(TimeSpan.FromHours(1));

// Users active today
var todayUsers = manager.GetActiveUsers(TimeSpan.FromDays(1));

Console.WriteLine($"{recentUsers.Count} users active in last hour");

CleanupInactiveUsers

Removes users inactive for specified duration.

csharp
public int CleanupInactiveUsers(TimeSpan maxIdleTime, string saveDirectory = null)

Returns: int – Number of users removed

Example:

csharp
// Remove users inactive for 30 days (no save)
int removed = manager.CleanupInactiveUsers(TimeSpan.FromDays(30));

// Remove and save to archive
int archived = manager.CleanupInactiveUsers(
    TimeSpan.FromDays(30),
    "archive/inactive/"
);

Console.WriteLine($"Cleaned up {archived} inactive users");

GetTotalUserDataSize

Gets total memory usage of all users.

csharp
public long GetTotalUserDataSize()

Returns: long – Approximate size in bytes

Example:

csharp
long bytes = manager.GetTotalUserDataSize();
double mb = bytes / (1024.0 * 1024.0);

Console.WriteLine($"Total user data: {mb:F2} MB");

GetPerUserDataSizes

Gets data size per user.

csharp
public Dictionary<string, long> GetPerUserDataSizes()

Example:

csharp
var sizes = manager.GetPerUserDataSizes();

// Find largest users
var largest = sizes.OrderByDescending(kvp => kvp.Value).Take(10);

foreach (var kvp in largest) {
    Console.WriteLine($"{kvp.Key}: {kvp.Value / 1024.0:F2} KB");
}

SetMaxUsers / GetUserCount

Manages user capacity.

csharp
public void SetMaxUsers(uint maxUsers)
public int GetUserCount()

Example:

csharp
// Increase capacity
manager.SetMaxUsers(50000);

// Monitor usage
int current = manager.GetUserCount();
Console.WriteLine($"Users: {current} / 50,000");

SaveAllUserData

Saves all users to directory.

csharp
public bool SaveAllUserData(string directory)

Example:

csharp
// Daily backup
manager.SaveAllUserData("backups/daily/");

// Creates files: user_alice.dat, user_bob.dat, etc.

LoadAllUserData

Loads all users from directory.

csharp
public int LoadAllUserData(string directory)

Returns: int – Number of users loaded

Example:

csharp
// Restore from backup
int loaded = manager.LoadAllUserData("backups/daily/");
Console.WriteLine($"Restored {loaded} users");

BackupUserData

Creates timestamped backup.

csharp
public bool BackupUserData(string backupDirectory)

Example:

csharp
// Automatic backup with timestamp
manager.BackupUserData("backups/");

// Creates: backups/user_backup_20251013_143022/

GetStatistics

Gets comprehensive usage statistics.

csharp
public Dictionary<string, object> GetStatistics()

Returns: Dictionary with keys:

  • total_users – Total user count
  • max_users – Maximum capacity
  • total_data_size – Total memory usage
  • active_last_hour – Active users (1 hour)
  • active_last_day – Active users (24 hours)
  • active_last_week – Active users (7 days)
  • variable_data_size – Memory used by variables
  • conversation_data_size – Memory used by conversations
  • feedback_data_size – Memory used by feedback
  • total_sessions – Cumulative session count
  • oldest_user – Creation date of oldest user
  • newest_user – Creation date of newest user

Example:

csharp
var stats = manager.GetStatistics();

Console.WriteLine($"Total Users: {stats["total_users"]}");
Console.WriteLine($"Active (1h): {stats["active_last_hour"]}");
Console.WriteLine($"Memory: {(long)stats["total_data_size"] / (1024*1024)} MB");

GetHealthStatus

Performs system health check.

csharp
public Dictionary<string, object> GetHealthStatus()

Returns: Dictionary with keys:

  • status – "healthy", "warning", or "error"
  • user_count – Current users
  • total_data_size – Memory usage
  • active_users – Active in last hour
  • largest_user – User ID with most data
  • largest_user_size – Size of largest user
  • users_per_mb – Average data per user
  • warning / error – Optional issue description

Example:

csharp
var health = manager.GetHealthStatus();

if (health["status"].ToString() == "warning") {
    Console.WriteLine($"Warning: {health["warning"]}");
    
    // Take action
    if ((long)health["largest_user_size"] > 50*1024*1024) {
        string userId = health["largest_user"].ToString();
        Console.WriteLine($"Large user detected: {userId}");
        // Archive or investigate
    }
}

OptimizeMemoryUsage

Forces garbage collection.

csharp
public void OptimizeMemoryUsage()

Example:

csharp
// After bulk cleanup
manager.CleanupInactiveUsers(TimeSpan.FromDays(30));
manager.OptimizeMemoryUsage();

GetUserSummary

Gets formatted report for dashboards.

csharp
public string GetUserSummary()

Example:

csharp
string report = manager.GetUserSummary();
File.WriteAllText("logs/user_report.txt", report);

// Or send to monitoring system
monitoringAPI.SendMetrics(report);

SilviaUser

Individual user session container with isolated data.

Constructor

csharp
public SilviaUser(string uid)
public SilviaUser(int iuid)

Note: Usually created via SilviaUserAPI.GetUser() or manager.CreateUser().


GetUid / GetIuid

Gets user identifier.

csharp
public string GetUid()
public int GetIuid()

Example:

csharp
var user = SilviaUserAPI.GetUser("alice");
string id = user.GetUid(); // "alice"

Session Metadata

Tracks user lifecycle.

csharp
public DateTime GetCreated()        // When user was first created
public DateTime GetLastActive()     // Last interaction timestamp
public int GetSessionCount()        // Number of sessions
public void SetLastActive(DateTime lastActive)
public void SetSessionCount(int sessionCount)
public void UpdateLastActive()      // Sets to DateTime.Now
public void IncrementSessionCount() // Adds 1 to session count

Example:

csharp
var user = SilviaUserAPI.GetUser("alice");

Console.WriteLine($"Created: {user.GetCreated()}");
Console.WriteLine($"Last Active: {user.GetLastActive()}");
Console.WriteLine($"Sessions: {user.GetSessionCount()}");

// Update activity
user.UpdateLastActive();
user.IncrementSessionCount();

GetSessionStats

Gets session info as array.

csharp
public string[] GetSessionStats()

Returns: [created, lastActive, sessionCount]

Example:

csharp
var stats = user.GetSessionStats();
Console.WriteLine($"Created: {stats[0]}");
Console.WriteLine($"Last Active: {stats[1]}");
Console.WriteLine($"Sessions: {stats[2]}");

GetDataSize

Gets approximate memory usage for this user.

csharp
public long GetDataSize()

Example:

csharp
long bytes = user.GetDataSize();
Console.WriteLine($"User data: {bytes / 1024.0:F2} KB");

User Variables

Per-user settings and preferences using $variable convention.

SetUserVariable

Sets a user-specific variable.

csharp
public bool SetUserVariable(string name, string value)

Example:

csharp
var user = SilviaUserAPI.GetUser("alice");

// Store user preferences
user.SetUserVariable("$user_name", "Alice Johnson");
user.SetUserVariable("$user_email", "alice@example.com");
user.SetUserVariable("$user_theme", "dark");
user.SetUserVariable("$user_language", "en-US");

Convention: Use $ prefix for SILVIA variable compatibility.


GetUserVariable

Retrieves a user variable.

csharp
public string GetUserVariable(string name)

Returns: string – Variable value, or null if not found

Example:

csharp
string name = user.GetUserVariable("$user_name");
string theme = user.GetUserVariable("$user_theme");

if (theme == "dark") {
    ApplyDarkTheme();
}

GetAllUserVariables

Gets all variables as name/value array.

csharp
public string[] GetAllUserVariables()

Returns: [name1, value1, name2, value2, ...]

Example:

csharp
string[] vars = user.GetAllUserVariables();

for (int i = 0; i < vars.Length; i += 2) {
    string name = vars[i];
    string value = vars[i + 1];
    Console.WriteLine($"{name} = {value}");
}

RemoveUserVariable / ClearUserVariables

Deletes variables.

csharp
public bool RemoveUserVariable(string name)
public void ClearUserVariables()

Example:

csharp
// Remove specific variable
user.RemoveUserVariable("$user_temp");

// Clear all variables
user.ClearUserVariables();

Integration with Brain Responses

User variables can be referenced in SILVIA brain exuders:

csharp
// In brain training:
// Exuder: "Welcome back, $user_name! Your balance is $user_balance."

// In code:
var user = SilviaUserAPI.GetUser("alice");
user.SetUserVariable("$user_name", "Alice");
user.SetUserVariable("$user_balance", "$1,234.56");

// When GetResponse is called:
string response = core.ApiBrain().GetResponse("check balance", null);
// Returns: "Welcome back, Alice! Your balance is $1,234.56."

Conversation History

Tracks complete input/output exchanges per user.

AddConversation

Stores a conversation exchange.

csharp
public bool AddConversation(string userInput, string aiResponse, int behaviorId = -1)

Parameters:

  • userInput – User's message
  • aiResponse – AI's response
  • behaviorId – Behavior that generated response (optional)

Example:

csharp
var user = SilviaUserAPI.GetUser("alice");

// After each exchange
string input = "What's the weather?";
string response = core.ApiBrain().GetResponse(input, null);
int behaviorId = core.ApiBrain().GetResponseBehaviorID(0);

user.AddConversation(input, response, behaviorId);

GetConversationHistory

Retrieves conversation history.

csharp
public string[] GetConversationHistory(int maxItems = 0)

Parameters:

  • maxItems – Max items to return (0 = all, returns most recent)

Returns: [input1, response1, behaviorId1, timestamp1, input2, response2, ...]

Example:

csharp
// Get last 10 exchanges
string[] history = user.GetConversationHistory(10);

for (int i = 0; i < history.Length; i += 4) {
    string input = history[i];
    string response = history[i + 1];
    string behaviorId = history[i + 2];
    string timestamp = history[i + 3];
    
    Console.WriteLine($"[{timestamp}] User: {input}");
    Console.WriteLine($"[{timestamp}] AI: {response} (Behavior: {behaviorId})");
}

GetLastConversation

Gets most recent exchange.

csharp
public string[] GetLastConversation()

Returns: [input, response, behaviorId, timestamp]

Example:

csharp
string[] last = user.GetLastConversation();

if (last.Length > 0) {
    Console.WriteLine($"Last input: {last[0]}");
    Console.WriteLine($"Last response: {last[1]}");
}

ClearConversationHistory

Deletes all conversation history.

csharp
public void ClearConversationHistory()

Example:

csharp
// Start fresh conversation
user.ClearConversationHistory();

Use Case: Context-Aware Responses

csharp
// User asks follow-up question
string input = "And what about tomorrow?";
string response = core.ApiBrain().GetResponse(input, null);

// Check conversation history for context
string[] history = user.GetConversationHistory(5);

// If previous question was about weather:
if (history[0].Contains("weather")) {
    // AI can reference context
    // Response: "Tomorrow will be sunny with a high of 75°F."
}

Feedback Management

Stores learning feedback for conversational improvement.

AddUserFeedback

Adds feedback entry.

csharp
public bool AddUserFeedback(string feedback, string context = null)

Parameters:

  • feedback – Feedback text
  • context – Optional context (input that triggered feedback)

Example:

csharp
var user = SilviaUserAPI.GetUser("alice");

// Positive feedback
user.AddUserFeedback("That was helpful!", "weather query");

// Negative feedback
user.AddUserFeedback("I didn't understand that", "unclear response");

// Correction
user.AddUserFeedback("My name is Alice, not Alex", "name recognition");

GetUserFeedbackHistory

Retrieves feedback history.

csharp
public string[] GetUserFeedbackHistory(int maxItems = 0)

Returns: [feedback1, context1, timestamp1, feedback2, context2, timestamp2, ...]

Example:

csharp
// Get last 20 feedback items
string[] feedback = user.GetUserFeedbackHistory(20);

for (int i = 0; i < feedback.Length; i += 3) {
    string text = feedback[i];
    string context = feedback[i + 1];
    string timestamp = feedback[i + 2];
    
    Console.WriteLine($"[{timestamp}] {text}");
    if (!string.IsNullOrEmpty(context)) {
        Console.WriteLine($"  Context: {context}");
    }
}

SearchUserFeedback

Searches feedback for patterns.

csharp
public string[] SearchUserFeedback(string searchTerm, int maxResults = 10)

Example:

csharp
// Find negative feedback
string[] negative = user.SearchUserFeedback("didn't understand", 10);

// Find feedback about specific topic
string[] weatherFeedback = user.SearchUserFeedback("weather", 5);

ClearUserFeedbackHistory

Deletes all feedback.

csharp
public void ClearUserFeedbackHistory()

Memory & State Integration

Future integration with SILVIA's advanced learning systems.

Memory Integration

Per-user concept storage.

csharp
internal SilviaMemory GetUserMemory()
public bool AddToUserMemory(int[] atoms, bool asInput)
public List<object> GetUserMemoryConcepts(int conceptId = -1)

Example (Future):

csharp
// Add concepts to user's memory
int[] concepts = core.ApiBrain().GetConceptsAsStrings("machine learning", false, false);
user.AddToUserMemory(concepts, true);

// Retrieve user's memory concepts
var memoryConcepts = user.GetUserMemoryConcepts();

Note: Requires SilviaMemory initialization with parent brain.


State Integration

Per-user event queues.

csharp
internal SilviaState GetUserState()
public bool PostUserEvent(string eventName, int behaviorId = -1, int exuderId = -1)
public bool ConsumeUserEvent(string eventName)

Example (Future):

csharp
// Post user-specific event
user.PostUserEvent("completed_tutorial", behaviorId, exuderId);

// Check and consume event
if (user.ConsumeUserEvent("completed_tutorial")) {
    // Award badge, update progress
}

Note: Requires SilviaState initialization with parent brain.


Session Management

UpdateLastActive

Marks user as active.

csharp
public void UpdateLastActive()

Example:

csharp
// After each user interaction
user.UpdateLastActive();

IncrementSessionCount

Tracks sessions.

csharp
public void IncrementSessionCount()

Example:

csharp
// On user login/reconnect
user.IncrementSessionCount();

Session Lifecycle

csharp
void HandleUserConnection(string userId) {
    var user = SilviaUserAPI.GetUser(userId);
    
    // Check if returning user
    if (user.GetSessionCount() > 1) {
        // Returning user
        TimeSpan idle = DateTime.Now - user.GetLastActive();
        Console.WriteLine($"Welcome back! Idle for {idle.TotalHours:F1} hours");
    } else {
        // New user
        Console.WriteLine("Welcome! This is your first session.");
    }
    
    // Update session
    user.IncrementSessionCount();
    user.UpdateLastActive();
}

Persistence & Backup

SaveUserData

Saves user to file.

csharp
public bool SaveUserData(string filename)

File Format:

# SILVIA User Data - alice
# Created: 10/13/2025 2:30:15 PM
# Last Active: 10/13/2025 4:45:22 PM
# Session Count: 7

# USER VARIABLES
VAR:$user_name:Alice Johnson
VAR:$user_email:alice@example.com

# CONVERSATION HISTORY
CONV:2025-10-13 14:30:20:What's the weather?:It's sunny, 72°F:42
CONV:2025-10-13 14:31:15:And tomorrow?:Tomorrow will be partly cloudy, 68°F:42

# FEEDBACK HISTORY
FEED:2025-10-13 14:31:30:That was helpful:weather query

Example:

csharp
// Save specific user
user.SaveUserData("user_data/alice.dat");

// Automated saves
void AutoSaveUser(SilviaUser user) {
    string path = $"user_data/{user.GetUid()}.dat";
    if (user.SaveUserData(path)) {
        Console.WriteLine($"Saved user: {user.GetUid()}");
    }
}

LoadUserData

Loads user from file.

csharp
public bool LoadUserData(string filename)

Example:

csharp
var user = SilviaUserAPI.GetUser("alice");

// Load previous session
if (user.LoadUserData("user_data/alice.dat")) {
    Console.WriteLine("Restored user session");
    
    // User variables, conversations, feedback are restored
    string name = user.GetUserVariable("$user_name");
    string[] history = user.GetConversationHistory(5);
}

Backup Strategies

Daily Backup

csharp
// Scheduled task
void DailyBackup() {
    var manager = SilviaUserAPI.GetManager();
    
    string timestamp = DateTime.Now.ToString("yyyyMMdd");
    string backupPath = $"backups/daily_{timestamp}/";
    
    manager.SaveAllUserData(backupPath);
    
    Console.WriteLine($"Backed up {manager.GetUserCount()} users");
}

Rolling Backup

csharp
void RollingBackup() {
    var manager = SilviaUserAPI.GetManager();
    
    // Keep 7 days of backups
    for (int i = 6; i >= 0; i--) {
        DateTime date = DateTime.Now.AddDays(-i);
        string path = $"backups/{date:yyyyMMdd}/";
        
        if (i == 0) {
            // Today's backup
            manager.SaveAllUserData(path);
        } else if (i > 7) {
            // Delete old backups
            if (Directory.Exists(path)) {
                Directory.Delete(path, true);
            }
        }
    }
}

Incremental Backup

csharp
void IncrementalBackup() {
    var manager = SilviaUserAPI.GetManager();
    
    // Only backup active users
    var activeUsers = manager.GetActiveUsers(TimeSpan.FromHours(24));
    
    foreach (var user in activeUsers) {
        string path = $"incremental/{user.GetUid()}.dat";
        user.SaveUserData(path);
    }
    
    Console.WriteLine($"Incrementally backed up {activeUsers.Count} active users");
}

Resource Management

Memory Monitoring

csharp
void MonitorMemoryUsage() {
    var manager = SilviaUserAPI.GetManager();
    
    long totalBytes = manager.GetTotalUserDataSize();
    double totalMB = totalBytes / (1024.0 * 1024.0);
    
    int userCount = manager.GetUserCount();
    double avgMB = totalMB / userCount;
    
    Console.WriteLine($"Total Memory: {totalMB:F2} MB");
    Console.WriteLine($"Users: {userCount}");
    Console.WriteLine($"Avg per user: {avgMB:F3} MB");
    
    // Alert if high
    if (totalMB > 500) {
        Console.WriteLine("WARNING: High memory usage!");
        
        // Find large users
        var sizes = manager.GetPerUserDataSizes();
        var largest = sizes.OrderByDescending(kvp => kvp.Value).Take(10);
        
        Console.WriteLine("Largest users:");
        foreach (var kvp in largest) {
            double mb = kvp.Value / (1024.0 * 1024.0);
            Console.WriteLine($"  {kvp.Key}: {mb:F2} MB");
        }
    }
}

Cleanup Strategies

Age-Based Cleanup

csharp
void CleanupOldUsers() {
    var manager = SilviaUserAPI.GetManager();
    
    // Remove users inactive for 90 days
    int removed = manager.CleanupInactiveUsers(
        TimeSpan.FromDays(90),
        "archive/"
    );
    
    Console.WriteLine($"Archived {removed} inactive users");
}

Size-Based Cleanup

csharp
void CleanupLargeUsers() {
    var manager = SilviaUserAPI.GetManager();
    var sizes = manager.GetPerUserDataSizes();
    
    // Remove users with >50MB data
    int removed = 0;
    foreach (var kvp in sizes) {
        if (kvp.Value > 50 * 1024 * 1024) {
            manager.RemoveUser(kvp.Key, $"archive/{kvp.Key}.dat");
            removed++;
        }
    }
    
    Console.WriteLine($"Archived {removed} large users");
}

Activity-Based Retention

csharp
void SmartCleanup() {
    var manager = SilviaUserAPI.GetManager();
    
    // Keep active users
    var activeLastWeek = manager.GetActiveUsers(TimeSpan.FromDays(7));
    var activeLastMonth = manager.GetActiveUsers(TimeSpan.FromDays(30));
    var activeLastYear = manager.GetActiveUsers(TimeSpan.FromDays(365));
    
    Console.WriteLine($"Active last week: {activeLastWeek.Count}");
    Console.WriteLine($"Active last month: {activeLastMonth.Count}");
    Console.WriteLine($"Active last year: {activeLastYear.Count}");
    
    // Remove inactive for 1 year
    int removed = manager.CleanupInactiveUsers(TimeSpan.FromDays(365), "cold_storage/");
    Console.WriteLine($"Moved {removed} users to cold storage");
}

Statistics & Monitoring

Real-Time Dashboard

csharp
void DisplayDashboard() {
    var manager = SilviaUserAPI.GetManager();
    var stats = manager.GetStatistics();
    var health = manager.GetHealthStatus();
    
    Console.Clear();
    Console.WriteLine("╔════════════════════════════════════════════════════════╗");
    Console.WriteLine("║           SILVIA User Management Dashboard            ║");
    Console.WriteLine("╠════════════════════════════════════════════════════════╣");
    Console.WriteLine($"║ Total Users:        {stats["total_users"],-34} ║");
    Console.WriteLine($"║ Max Capacity:       {stats["max_users"],-34} ║");
    Console.WriteLine($"║ Health Status:      {health["status"],-34} ║");
    Console.WriteLine("╠════════════════════════════════════════════════════════╣");
    Console.WriteLine($"║ Active (1 hour):    {stats["active_last_hour"],-34} ║");
    Console.WriteLine($"║ Active (24 hours):  {stats["active_last_day"],-34} ║");
    Console.WriteLine($"║ Active (7 days):    {stats["active_last_week"],-34} ║");
    Console.WriteLine("╠════════════════════════════════════════════════════════╣");
    
    long totalBytes = (long)stats["total_data_size"];
    double totalMB = totalBytes / (1024.0 * 1024.0);
    Console.WriteLine($"║ Total Memory:       {totalMB:F2} MB{"",-26} ║");
    
    Console.WriteLine($"║ Total Sessions:     {stats["total_sessions"],-34} ║");
    Console.WriteLine("╚════════════════════════════════════════════════════════╝");
    
    // Warnings
    if (health["status"].ToString() != "healthy") {
        Console.WriteLine($"\n⚠️  WARNING: {health.GetValueOrDefault("warning", "Unknown issue")}");
    }
}

Metrics Export

csharp
void ExportMetrics() {
    var manager = SilviaUserAPI.GetManager();
    var stats = manager.GetStatistics();
    
    // Export to Prometheus format
    var prometheus = new StringBuilder();
    prometheus.AppendLine($"silvia_users_total {stats["total_users"]}");
    prometheus.AppendLine($"silvia_users_active_1h {stats["active_last_hour"]}");
    prometheus.AppendLine($"silvia_users_active_24h {stats["active_last_day"]}");
    prometheus.AppendLine($"silvia_users_active_7d {stats["active_last_week"]}");
    prometheus.AppendLine($"silvia_memory_bytes {stats["total_data_size"]}");
    prometheus.AppendLine($"silvia_sessions_total {stats["total_sessions"]}");
    
    File.WriteAllText("metrics/silvia_metrics.prom", prometheus.ToString());
    
    // Export to JSON
    string json = JsonConvert.SerializeObject(stats, Formatting.Indented);
    File.WriteAllText("metrics/silvia_stats.json", json);
}

Alert System

csharp
void CheckAlerts() {
    var manager = SilviaUserAPI.GetManager();
    var health = manager.GetHealthStatus();
    
    // Check user capacity
    int userCount = manager.GetUserCount();
    int maxUsers = 10000;
    double usagePercent = (userCount / (double)maxUsers) * 100;
    
    if (usagePercent > 90) {
        SendAlert($"CRITICAL: User capacity at {usagePercent:F1}%");
    } else if (usagePercent > 75) {
        SendAlert($"WARNING: User capacity at {usagePercent:F1}%");
    }
    
    // Check memory usage
    long memoryBytes = manager.GetTotalUserDataSize();
    double memoryMB = memoryBytes / (1024.0 * 1024.0);
    
    if (memoryMB > 1000) {
        SendAlert($"CRITICAL: User data exceeds 1 GB ({memoryMB:F0} MB)");
    } else if (memoryMB > 500) {
        SendAlert($"WARNING: User data exceeds 500 MB ({memoryMB:F0} MB)");
    }
    
    // Check health status
    if (health["status"].ToString() != "healthy") {
        SendAlert($"Health check failed: {health.GetValueOrDefault("warning", "Unknown")}");
    }
}

void SendAlert(string message) {
    Console.WriteLine($"[ALERT] {DateTime.Now}: {message}");
    // Send email, webhook, etc.
}

Platform-Specific Integrations

ASP.NET Core Middleware

csharp
// Startup.cs
public void ConfigureServices(IServiceCollection services) {
    // Enable user management
    services.AddSingleton<ISilviaService>(provider => {
        var core = SilviaCoreManager.CreateCore("web_core", "chatbot.sil", true);
        SilviaUserAPI.Enable(core, 50000);
        return new SilviaService(core);
    });
}

// SilviaService.cs
public class SilviaService : ISilviaService {
    private SilviaCore _core;
    
    public SilviaService(SilviaCore core) {
        _core = core;
    }
    
    public async Task<ChatResponse> GetResponseAsync(string userId, string input) {
        return await Task.Run(() => {
            // Get user
            var user = SilviaUserAPI.GetUser(userId);
            
            // Load user context
            string userName = user.GetUserVariable("$user_name") ?? "Guest";
            user.SetUserVariable("$last_input", input);
            
            // Get AI response
            string response = _core.ApiBrain().GetResponse(input, null);
            int behaviorId = _core.ApiBrain().GetResponseBehaviorID(0);
            
            // Store conversation
            user.AddConversation(input, response, behaviorId);
            user.UpdateLastActive();
            
            return new ChatResponse {
                Text = response,
                BehaviorId = behaviorId,
                UserName = userName
            };
        });
    }
}

// Controller
[ApiController]
[Route("api/[controller]")]
public class ChatController : ControllerBase {
    private readonly ISilviaService _silvia;
    
    public ChatController(ISilviaService silvia) {
        _silvia = silvia;
    }
    
    [HttpPost]
    public async Task<IActionResult> Chat([FromBody] ChatRequest request) {
        string userId = User.Identity.Name ?? request.SessionId;
        var response = await _silvia.GetResponseAsync(userId, request.Message);
        return Ok(response);
    }
    
    [HttpGet("history")]
    public IActionResult GetHistory() {
        string userId = User.Identity.Name;
        var user = SilviaUserAPI.GetUser(userId);
        
        string[] history = user.GetConversationHistory(20);
        return Ok(new { history });
    }
}

SignalR Real-Time Chat

csharp
public class ChatHub : Hub {
    private SilviaCore _core;
    
    public ChatHub(ISilviaService silvia) {
        _core = silvia.GetCore();
    }
    
    public async Task SendMessage(string message) {
        string userId = Context.UserIdentifier ?? Context.ConnectionId;
        var user = SilviaUserAPI.GetUser(userId);
        
        // Get response
        string response = _core.ApiBrain().GetResponse(message, null);
        
        // Store conversation
        user.AddConversation(message, response);
        user.UpdateLastActive();
        
        // Send to client
        await Clients.Caller.SendAsync("ReceiveMessage", response);
    }
    
    public async Task GetHistory() {
        string userId = Context.UserIdentifier ?? Context.ConnectionId;
        var user = SilviaUserAPI.GetUser(userId);
        
        string[] history = user.GetConversationHistory(10);
        await Clients.Caller.SendAsync("LoadHistory", history);
    }
}

Azure Functions

csharp
[FunctionName("SilviaChat")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req,
    ILogger log)
{
    // Initialize (once per function instance)
    if (!SilviaUserAPI.IsEnabled()) {
        var core = SilviaCoreManager.CreateCore("azure_core", "brain.sil", true);
        SilviaUserAPI.Enable(core, 100000);
    }
    
    // Parse request
    string requestBody = await req.ReadAsStringAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    string userId = data?.userId;
    string input = data?.message;
    
    // Get user
    var user = SilviaUserAPI.GetUser(userId);
    
    // Get response
    var core = SilviaCoreManager.GetCore("azure_core");
    string response = core.ApiBrain().GetResponse(input, null);
    
    // Store and return
    user.AddConversation(input, response);
    user.UpdateLastActive();
    
    return new OkObjectResult(new {
        response,
        userId,
        timestamp = DateTime.Now
    });
}

Unity Game

csharp
public class SilviaManager : MonoBehaviour {
    private SilviaCore _core;
    private string _playerId;
    
    void Start() {
        // Load brain
        TextAsset brainAsset = Resources.Load<TextAsset>("Brains/game_brain");
        using (var ms = new MemoryStream(brainAsset.bytes)) {
            using (var br = new BinaryReader(ms)) {
                _core = SilviaCoreManager.CreateCore("game_core", null, false);
                _core.ApiBrain().LoadStream(br, null, false, true);
            }
        }
        
        // Enable user management
        SilviaUserAPI.Enable(_core, 10000);
        
        // Get player ID
        _playerId = SystemInfo.deviceUniqueIdentifier;
        
        // Load player data
        var user = SilviaUserAPI.GetUser(_playerId);
        string savePath = Path.Combine(Application.persistentDataPath, $"player_{_playerId}.dat");
        user.LoadUserData(savePath);
        
        Debug.Log($"Player session count: {user.GetSessionCount()}");
    }
    
    public void SendMessage(string input) {
        var user = SilviaUserAPI.GetUser(_playerId);
        
        // Set player context
        user.SetUserVariable("$player_name", PlayerPrefs.GetString("PlayerName"));
        user.SetUserVariable("$player_level", PlayerPrefs.GetInt("Level").ToString());
        
        // Get response
        string response = _core.ApiBrain().GetResponse(input, null);
        
        // Store conversation
        user.AddConversation(input, response);
        user.UpdateLastActive();
        
        // Display in UI
        chatUI.AddMessage("AI", response);
    }
    
    void OnApplicationQuit() {
        // Save player data
        var user = SilviaUserAPI.GetUser(_playerId);
        string savePath = Path.Combine(Application.persistentDataPath, $"player_{_playerId}.dat");
        user.SaveUserData(savePath);
    }
}

Discord Bot

csharp
public class SilviaDiscordBot {
    private DiscordSocketClient _client;
    private SilviaCore _core;
    
    public async Task MainAsync() {
        // Initialize SILVIA
        _core = SilviaCoreManager.CreateCore("discord_core", "discord_brain.sil", true);
        SilviaUserAPI.Enable(_core, 100000);
        
        // Initialize Discord
        _client = new DiscordSocketClient();
        _client.MessageReceived += HandleMessage;
        
        await _client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("DISCORD_TOKEN"));
        await _client.StartAsync();
        
        await Task.Delay(-1);
    }
    
    private async Task HandleMessage(SocketMessage message) {
        if (message.Author.IsBot) return;
        
        string userId = message.Author.Id.ToString();
        var user = SilviaUserAPI.GetUser(userId);
        
        // Set user context
        user.SetUserVariable("$user_name", message.Author.Username);
        user.SetUserVariable("$user_discriminator", message.Author.Discriminator);
        
        // Get response
        string response = _core.ApiBrain().GetResponse(message.Content, null);
        
        // Store conversation
        user.AddConversation(message.Content, response);
        user.UpdateLastActive();
        
        // Reply
        await message.Channel.SendMessageAsync(response);
    }
}

Best Practices

1. Enable User Management Strategically

csharp
// For single-user applications: DON'T enable
var core = SilviaCoreManager.CreateCore("single_user", "brain.sil", true);
// No user management overhead

// For multi-user servers: DO enable
var core = SilviaCoreManager.CreateCore("multi_user", "brain.sil", true);
SilviaUserAPI.Enable(core, 10000);

2. Use User Variables for Personalization

csharp
void PersonalizeResponse(SilviaUser user, string input) {
    // Load user preferences
    string name = user.GetUserVariable("$user_name");
    string language = user.GetUserVariable("$user_language") ?? "en-US";
    string timezone = user.GetUserVariable("$user_timezone") ?? "UTC";
    
    // Set context for this request
    user.SetUserVariable("$current_time", DateTime.Now.ToString());
    user.SetUserVariable("$current_input", input);
    
    // Brain exuders can now reference these variables
    string response = _core.ApiBrain().GetResponse(input, null);
}

3. Implement Graceful Degradation

csharp
string GetResponse(string userId, string input) {
    SilviaUser user = null;
    
    try {
        // Try user-specific mode
        if (SilviaUserAPI.IsEnabled()) {
            user = SilviaUserAPI.GetUser(userId);
            
            // Load user context
            string userName = user.GetUserVariable("$user_name");
            if (!string.IsNullOrEmpty(userName)) {
                _core.SetVariable("$user_name", userName);
            }
        }
        
        // Get response
        string response = _core.ApiBrain().GetResponse(input, null);
        
        // Store if user management enabled
        if (user != null) {
            user.AddConversation(input, response);
            user.UpdateLastActive();
        }
        
        return response;
        
    } catch (Exception ex) {
        Console.WriteLine($"Error: {ex.Message}");
        return "I'm having trouble processing that right now.";
    }
}

4. Regular Maintenance

csharp
// Run daily
void DailyMaintenance() {
    var manager = SilviaUserAPI.GetManager();
    
    // 1. Backup all users
    manager.BackupUserData("backups/");
    
    // 2. Cleanup inactive users
    int removed = manager.CleanupInactiveUsers(TimeSpan.FromDays(90), "archive/");
    Console.WriteLine($"Archived {removed} inactive users");
    
    // 3. Optimize memory
    manager.OptimizeMemoryUsage();
    
    // 4. Generate report
    var stats = manager.GetStatistics();
    var report = manager.GetUserSummary();
    File.WriteAllText("logs/daily_report.txt", report);
    
    // 5. Check health
    var health = manager.GetHealthStatus();
    if (health["status"].ToString() != "healthy") {
        SendAlert($"User management health: {health["status"]}");
    }
}

5. Monitor Resource Usage

csharp
// Run every 5 minutes
void MonitorResources() {
    var manager = SilviaUserAPI.GetManager();
    
    // Check memory
    long bytes = manager.GetTotalUserDataSize();
    double mb = bytes / (1024.0 * 1024.0);
    
    if (mb > 1000) {
        // Over 1GB - take action
        Console.WriteLine($"WARNING: User data at {mb:F0} MB");
        
        // Find and archive large users
        var sizes = manager.GetPerUserDataSizes();
        foreach (var kvp in sizes.OrderByDescending(x => x.Value).Take(10)) {
            if (kvp.Value > 10 * 1024 * 1024) { // 10MB
                var user = manager.GetUser(kvp.Key);
                user.SaveUserData($"archive/{kvp.Key}.dat");
                manager.RemoveUser(kvp.Key);
            }
        }
    }
    
    // Check user count
    int count = manager.GetUserCount();
    if (count > 9000) {
        Console.WriteLine($"WARNING: Approaching max users ({count}/10,000)");
        // Consider increasing capacity or cleanup
    }
}

6. Implement Session Resumption

csharp
void ResumeUserSession(string userId) {
    var user = SilviaUserAPI.GetUser(userId);
    
    // Load previous session if exists
    string dataPath = $"user_data/{userId}.dat";
    if (File.Exists(dataPath)) {
        user.LoadUserData(dataPath);
        
        // Check session age
        TimeSpan idle = DateTime.Now - user.GetLastActive();
        
        if (idle.TotalDays > 7) {
            // Old session - clear conversation history
            user.ClearConversationHistory();
            SendMessage("Welcome back! It's been a while.");
        } else if (idle.TotalHours > 1) {
            // Recent session - resume context
            var lastConv = user.GetLastConversation();
            if (lastConv.Length > 0) {
                SendMessage($"Continuing from: \"{lastConv[0]}\"");
            }
        } else {
            // Active session
            SendMessage("Welcome back!");
        }
    } else {
        // New user
        SendMessage("Welcome! I'm SILVIA. How can I help you?");
    }
    
    // Update session
    user.IncrementSessionCount();
    user.UpdateLastActive();
}

7. Thread Safety

csharp
// CORRECT: User management handles locking internally
void HandleConcurrentRequests() {
    Parallel.For(0, 100, i => {
        var user = SilviaUserAPI.GetUser($"user_{i % 10}"); // 10 users, 100 requests
        user.SetUserVariable("$counter", i.ToString());
        user.UpdateLastActive();
    });
    // No race conditions - internal locking protects data
}

// CORRECT: Multiple threads can access same user safely
var tasks = new Task[10];
for (int i = 0; i < 10; i++) {
    tasks[i] = Task.Run(() => {
        var user = SilviaUserAPI.GetUser("alice");
        string name = user.GetUserVariable("$user_name"); // Safe concurrent read
    });
}
Task.WaitAll(tasks);

8. Error Handling

csharp
string SafeGetResponse(string userId, string input) {
    try {
        // Check if user management enabled
        if (!SilviaUserAPI.IsEnabled()) {
            // Fallback to single-user mode
            return _core.ApiBrain().GetResponse(input, null);
        }
        
        // Get user
        var user = SilviaUserAPI.GetUser(userId);
        if (user == null) {
            Console.WriteLine($"Failed to create user: {userId}");
            return "I'm having trouble with your session right now.";
        }
        
        // Check user data size
        long userSize = user.GetDataSize();
        if (userSize > 50 * 1024 * 1024) { // 50MB
            Console.WriteLine($"User {userId} data size exceeded limit: {userSize} bytes");
            // Archive and clear
            user.SaveUserData($"archive/{userId}.dat");
            user.ClearConversationHistory();
            user.ClearUserFeedbackHistory();
        }
        
        // Get response
        string response = _core.ApiBrain().GetResponse(input, null);
        
        // Store conversation
        if (!user.AddConversation(input, response)) {
            Console.WriteLine($"Failed to store conversation for user: {userId}");
        }
        
        user.UpdateLastActive();
        return response;
        
    } catch (OutOfMemoryException) {
        Console.WriteLine("Out of memory - running cleanup");
        var manager = SilviaUserAPI.GetManager();
        manager.CleanupInactiveUsers(TimeSpan.FromHours(1));
        manager.OptimizeMemoryUsage();
        return "System is experiencing high load. Please try again.";
        
    } catch (Exception ex) {
        Console.WriteLine($"Error processing request: {ex.Message}");
        return "I encountered an error. Please try again.";
    }
}

API Summary

SilviaUserAPI (Static)

  • Enable(core, maxUsers) – Activate user management
  • Disable() – Deactivate user management
  • IsEnabled() – Check if enabled
  • GetUser(identifier) – Get or create user
  • TouchUser(identifier) – Update activity
  • GetSummary() – Get formatted report
  • GetManager() – Get manager instance

SilviaUserManager

Lifecycle:

  • CreateUser(identifier, dataPath) – Create new user
  • GetOrCreateUser(identifier) – Get or create
  • RemoveUser(identifier, savePath) – Remove user
  • GetUsersByPattern(pattern) – Search users

Session:

  • TouchUser(identifier) – Update activity
  • GetActiveUsers(withinTime) – Get active users
  • CleanupInactiveUsers(maxIdleTime, saveDirectory) – Remove inactive

Resources:

  • GetTotalUserDataSize() – Total memory usage
  • GetPerUserDataSizes() – Per-user sizes
  • SetMaxUsers(maxUsers) – Set capacity
  • GetUserCount() – Current count

Persistence:

  • SaveAllUserData(directory) – Save all
  • LoadAllUserData(directory) – Load all
  • BackupUserData(backupDirectory) – Create backup

Monitoring:

  • GetStatistics() – Comprehensive stats
  • GetHealthStatus() – Health check
  • OptimizeMemoryUsage() – Force GC
  • GetUserSummary() – Formatted report

SilviaUser

Identity:

  • GetUid() / GetIuid() – Get identifier
  • GetCreated() – Creation timestamp
  • GetLastActive() – Last activity
  • GetSessionCount() – Session count

Variables:

  • SetUserVariable(name, value) – Set variable
  • GetUserVariable(name) – Get variable
  • GetAllUserVariables() – Get all variables
  • RemoveUserVariable(name) – Remove variable
  • ClearUserVariables() – Clear all

Conversations:

  • AddConversation(input, response, behaviorId) – Store exchange
  • GetConversationHistory(maxItems) – Get history
  • GetLastConversation() – Get most recent
  • ClearConversationHistory() – Clear history

Feedback:

  • AddUserFeedback(feedback, context) – Add feedback
  • GetUserFeedbackHistory(maxItems) – Get history
  • SearchUserFeedback(searchTerm, maxResults) – Search feedback
  • ClearUserFeedbackHistory() – Clear history

Memory & State:

  • GetUserMemory() – Get memory object
  • AddToUserMemory(atoms, asInput) – Add concepts
  • GetUserMemoryConcepts(conceptId) – Get concepts
  • GetUserState() – Get state object
  • PostUserEvent(eventName, behaviorId, exuderId) – Post event
  • ConsumeUserEvent(eventName) – Consume event

Session:

  • UpdateLastActive() – Mark active
  • IncrementSessionCount() – Increment sessions
  • GetSessionStats() – Get stats array
  • GetDataSize() – Get memory usage

Persistence:

  • SaveUserData(filename) – Save to file
  • LoadUserData(filename) – Load from file

Remarks

ApiUser Manages SILVIA's scalability:

Default Config:

  • 1 core = 1 user
  • Instanced Knowledgebases Per-User

Multi-User Per Core:

  • 1 core = 10,000 users
  • Shared Knowledgebase Per-Core
  • 10K users = 550 MB memory
  • Simple single-core management

This breakthrough enables:

  • Enterprise SaaS: Massive multi-tenancy
  • IoT Platforms: Millions of device sessions
  • Gaming Servers: Thousands of players per instance
  • Cloud APIs: Cost-effective scaling

Optional activation means zero impact on existing deployments while providing a game-changing architectural improvement for new multi-user systems.


© Copyright Cognitive Code Corp. 2007-2026

SILVIA is a registered Trademark of Cognitive Code Corp.

SILVIA is a registered Trademark of Cognitive Code Corp.