mem-llm 1.0.2__py3-none-any.whl → 2.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mem-llm might be problematic. Click here for more details.

Files changed (41) hide show
  1. mem_llm/__init__.py +71 -8
  2. mem_llm/api_server.py +595 -0
  3. mem_llm/base_llm_client.py +201 -0
  4. mem_llm/builtin_tools.py +311 -0
  5. mem_llm/builtin_tools_async.py +170 -0
  6. mem_llm/cli.py +254 -0
  7. mem_llm/clients/__init__.py +22 -0
  8. mem_llm/clients/lmstudio_client.py +393 -0
  9. mem_llm/clients/ollama_client.py +354 -0
  10. mem_llm/config.yaml.example +1 -1
  11. mem_llm/config_from_docs.py +1 -1
  12. mem_llm/config_manager.py +5 -3
  13. mem_llm/conversation_summarizer.py +372 -0
  14. mem_llm/data_export_import.py +640 -0
  15. mem_llm/dynamic_prompt.py +298 -0
  16. mem_llm/llm_client.py +77 -14
  17. mem_llm/llm_client_factory.py +260 -0
  18. mem_llm/logger.py +129 -0
  19. mem_llm/mem_agent.py +1178 -87
  20. mem_llm/memory_db.py +290 -59
  21. mem_llm/memory_manager.py +60 -1
  22. mem_llm/prompt_security.py +304 -0
  23. mem_llm/response_metrics.py +221 -0
  24. mem_llm/retry_handler.py +193 -0
  25. mem_llm/thread_safe_db.py +301 -0
  26. mem_llm/tool_system.py +537 -0
  27. mem_llm/vector_store.py +278 -0
  28. mem_llm/web_launcher.py +129 -0
  29. mem_llm/web_ui/README.md +44 -0
  30. mem_llm/web_ui/__init__.py +7 -0
  31. mem_llm/web_ui/index.html +641 -0
  32. mem_llm/web_ui/memory.html +569 -0
  33. mem_llm/web_ui/metrics.html +75 -0
  34. mem_llm-2.1.0.dist-info/METADATA +753 -0
  35. mem_llm-2.1.0.dist-info/RECORD +40 -0
  36. {mem_llm-1.0.2.dist-info → mem_llm-2.1.0.dist-info}/WHEEL +1 -1
  37. mem_llm-2.1.0.dist-info/entry_points.txt +3 -0
  38. mem_llm/prompt_templates.py +0 -244
  39. mem_llm-1.0.2.dist-info/METADATA +0 -382
  40. mem_llm-1.0.2.dist-info/RECORD +0 -15
  41. {mem_llm-1.0.2.dist-info → mem_llm-2.1.0.dist-info}/top_level.txt +0 -0
mem_llm/logger.py ADDED
@@ -0,0 +1,129 @@
1
+ """
2
+ Enhanced Logging System for Mem-LLM
3
+ ====================================
4
+ Provides structured logging with different levels and output formats.
5
+ """
6
+
7
+ import logging
8
+ import sys
9
+ from datetime import datetime
10
+ from pathlib import Path
11
+ from typing import Optional
12
+
13
+
14
+ class MemLLMLogger:
15
+ """Structured logger for Mem-LLM with file and console output"""
16
+
17
+ def __init__(self,
18
+ name: str = "mem_llm",
19
+ log_file: Optional[str] = None,
20
+ log_level: str = "INFO",
21
+ console_output: bool = True):
22
+ """
23
+ Initialize logger
24
+
25
+ Args:
26
+ name: Logger name
27
+ log_file: Path to log file (optional)
28
+ log_level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
29
+ console_output: Enable console output
30
+ """
31
+ self.logger = logging.getLogger(name)
32
+ self.logger.setLevel(getattr(logging, log_level.upper()))
33
+
34
+ # Clear existing handlers
35
+ self.logger.handlers = []
36
+
37
+ # Formatter
38
+ formatter = logging.Formatter(
39
+ '%(asctime)s | %(name)s | %(levelname)s | %(message)s',
40
+ datefmt='%Y-%m-%d %H:%M:%S'
41
+ )
42
+
43
+ # Console handler
44
+ if console_output:
45
+ console_handler = logging.StreamHandler(sys.stdout)
46
+ console_handler.setFormatter(formatter)
47
+ self.logger.addHandler(console_handler)
48
+
49
+ # File handler
50
+ if log_file:
51
+ log_path = Path(log_file)
52
+ log_path.parent.mkdir(parents=True, exist_ok=True)
53
+ file_handler = logging.FileHandler(log_file, encoding='utf-8')
54
+ file_handler.setFormatter(formatter)
55
+ self.logger.addHandler(file_handler)
56
+
57
+ def debug(self, message: str, **kwargs):
58
+ """Debug level log"""
59
+ extra_info = " | ".join(f"{k}={v}" for k, v in kwargs.items())
60
+ full_message = f"{message} | {extra_info}" if extra_info else message
61
+ self.logger.debug(full_message)
62
+
63
+ def info(self, message: str, **kwargs):
64
+ """Info level log"""
65
+ extra_info = " | ".join(f"{k}={v}" for k, v in kwargs.items())
66
+ full_message = f"{message} | {extra_info}" if extra_info else message
67
+ self.logger.info(full_message)
68
+
69
+ def warning(self, message: str, **kwargs):
70
+ """Warning level log"""
71
+ extra_info = " | ".join(f"{k}={v}" for k, v in kwargs.items())
72
+ full_message = f"{message} | {extra_info}" if extra_info else message
73
+ self.logger.warning(full_message)
74
+
75
+ def error(self, message: str, **kwargs):
76
+ """Error level log"""
77
+ extra_info = " | ".join(f"{k}={v}" for k, v in kwargs.items())
78
+ full_message = f"{message} | {extra_info}" if extra_info else message
79
+ self.logger.error(full_message)
80
+
81
+ def critical(self, message: str, **kwargs):
82
+ """Critical level log"""
83
+ extra_info = " | ".join(f"{k}={v}" for k, v in kwargs.items())
84
+ full_message = f"{message} | {extra_info}" if extra_info else message
85
+ self.logger.critical(full_message)
86
+
87
+ def log_llm_call(self, model: str, prompt_length: int, response_length: int, duration: float):
88
+ """Log LLM API call with metrics"""
89
+ self.info(
90
+ "LLM API Call",
91
+ model=model,
92
+ prompt_tokens=prompt_length,
93
+ response_tokens=response_length,
94
+ duration_ms=f"{duration*1000:.2f}"
95
+ )
96
+
97
+ def log_memory_operation(self, operation: str, user_id: str, success: bool, details: str = ""):
98
+ """Log memory operations"""
99
+ level = self.info if success else self.error
100
+ level(
101
+ f"Memory {operation}",
102
+ user_id=user_id,
103
+ success=success,
104
+ details=details
105
+ )
106
+
107
+ def log_error_with_context(self, error: Exception, context: dict):
108
+ """Log error with full context"""
109
+ self.error(
110
+ f"Exception: {type(error).__name__}: {str(error)}",
111
+ **context
112
+ )
113
+
114
+
115
+ def get_logger(name: str = "mem_llm",
116
+ log_file: Optional[str] = "logs/mem_llm.log",
117
+ log_level: str = "INFO") -> MemLLMLogger:
118
+ """
119
+ Get or create logger instance
120
+
121
+ Args:
122
+ name: Logger name
123
+ log_file: Log file path
124
+ log_level: Logging level
125
+
126
+ Returns:
127
+ MemLLMLogger instance
128
+ """
129
+ return MemLLMLogger(name=name, log_file=log_file, log_level=log_level)