mcp-memory-server 0.2.0__tar.gz
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.
- mcp_memory_server-0.2.0/.gitignore +38 -0
- mcp_memory_server-0.2.0/CHANGELOG.md +34 -0
- mcp_memory_server-0.2.0/CLAUDE.md +8 -0
- mcp_memory_server-0.2.0/LICENSE +21 -0
- mcp_memory_server-0.2.0/PKG-INFO +219 -0
- mcp_memory_server-0.2.0/PROJECT_SUMMARY.md +295 -0
- mcp_memory_server-0.2.0/README.md +180 -0
- mcp_memory_server-0.2.0/pyproject.toml +88 -0
- mcp_memory_server-0.2.0/src/aimemory/__init__.py +3 -0
- mcp_memory_server-0.2.0/src/aimemory/config.py +267 -0
- mcp_memory_server-0.2.0/src/aimemory/dataset/__init__.py +16 -0
- mcp_memory_server-0.2.0/src/aimemory/dataset/builder.py +270 -0
- mcp_memory_server-0.2.0/src/aimemory/dataset/splitter.py +191 -0
- mcp_memory_server-0.2.0/src/aimemory/dataset/stats.py +300 -0
- mcp_memory_server-0.2.0/src/aimemory/i18n/__init__.py +95 -0
- mcp_memory_server-0.2.0/src/aimemory/i18n/en.py +157 -0
- mcp_memory_server-0.2.0/src/aimemory/i18n/ko.py +179 -0
- mcp_memory_server-0.2.0/src/aimemory/mcp/__init__.py +5 -0
- mcp_memory_server-0.2.0/src/aimemory/mcp/__main__.py +5 -0
- mcp_memory_server-0.2.0/src/aimemory/mcp/bridge.py +487 -0
- mcp_memory_server-0.2.0/src/aimemory/mcp/server.py +314 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/__init__.py +50 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/composer.py +157 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/consolidation.py +197 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/forgetting.py +178 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/graph_retriever.py +143 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/graph_store.py +492 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/knowledge_graph.py +184 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/resolution.py +140 -0
- mcp_memory_server-0.2.0/src/aimemory/memory/sleep_cycle.py +289 -0
- mcp_memory_server-0.2.0/src/aimemory/online/__init__.py +35 -0
- mcp_memory_server-0.2.0/src/aimemory/online/ab_comparator.py +182 -0
- mcp_memory_server-0.2.0/src/aimemory/online/autonomy.py +115 -0
- mcp_memory_server-0.2.0/src/aimemory/online/enhanced_encoder.py +53 -0
- mcp_memory_server-0.2.0/src/aimemory/online/enhanced_policy.py +164 -0
- mcp_memory_server-0.2.0/src/aimemory/online/gossip.py +280 -0
- mcp_memory_server-0.2.0/src/aimemory/online/policy.py +438 -0
- mcp_memory_server-0.2.0/src/aimemory/online/replay_buffer.py +53 -0
- mcp_memory_server-0.2.0/src/aimemory/online/reranker.py +570 -0
- mcp_memory_server-0.2.0/src/aimemory/online/rule_verifier.py +57 -0
- mcp_memory_server-0.2.0/src/aimemory/online/transport.py +162 -0
- mcp_memory_server-0.2.0/src/aimemory/reward/__init__.py +31 -0
- mcp_memory_server-0.2.0/src/aimemory/reward/calculator.py +258 -0
- mcp_memory_server-0.2.0/src/aimemory/reward/feedback_detector.py +209 -0
- mcp_memory_server-0.2.0/src/aimemory/reward/implicit_detector.py +66 -0
- mcp_memory_server-0.2.0/src/aimemory/reward/korean_patterns.py +269 -0
- mcp_memory_server-0.2.0/src/aimemory/reward/signals.py +524 -0
- mcp_memory_server-0.2.0/src/aimemory/schemas.py +169 -0
- mcp_memory_server-0.2.0/src/aimemory/selfplay/__init__.py +31 -0
- mcp_memory_server-0.2.0/src/aimemory/selfplay/engine.py +427 -0
- mcp_memory_server-0.2.0/src/aimemory/selfplay/llm_client.py +172 -0
- mcp_memory_server-0.2.0/src/aimemory/selfplay/memory_agent.py +381 -0
- mcp_memory_server-0.2.0/src/aimemory/selfplay/scenarios.py +201 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.pyo
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.egg
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
|
|
10
|
+
# Virtual environment
|
|
11
|
+
.venv/
|
|
12
|
+
|
|
13
|
+
# Testing
|
|
14
|
+
.pytest_cache/
|
|
15
|
+
htmlcov/
|
|
16
|
+
.coverage
|
|
17
|
+
|
|
18
|
+
# IDE
|
|
19
|
+
.vscode/
|
|
20
|
+
.idea/
|
|
21
|
+
*.swp
|
|
22
|
+
*.swo
|
|
23
|
+
|
|
24
|
+
# OS
|
|
25
|
+
.DS_Store
|
|
26
|
+
Thumbs.db
|
|
27
|
+
|
|
28
|
+
# AIMemory runtime data
|
|
29
|
+
memory_db/
|
|
30
|
+
checkpoints/
|
|
31
|
+
|
|
32
|
+
# Data artifacts (keep raw source files, ignore generated)
|
|
33
|
+
data/embeddings/
|
|
34
|
+
data/plots/
|
|
35
|
+
data/splits/
|
|
36
|
+
|
|
37
|
+
# Claude Code
|
|
38
|
+
.claude/plans/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.2.0] - 2026-02-28
|
|
9
|
+
|
|
10
|
+
First public release.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **MCP Server** with 12 tools: `auto_search`, `memory_save`, `memory_search`, `memory_update`, `memory_delete`, `memory_get_related`, `memory_pin`, `memory_unpin`, `memory_stats`, `sleep_cycle_run`, `policy_status`, `policy_decide`
|
|
15
|
+
- **RL Memory Policy** โ Rule-based importance scoring + MLP contextual bandit (SAVE/SKIP/RETRIEVE)
|
|
16
|
+
- **Enhanced Policy** (opt-in) โ 778d state encoder (SentenceTransformer 768d + 10d hand-crafted), experience replay buffer, progressive autonomy
|
|
17
|
+
- **Semantic Search** โ ChromaDB vector store with `intfloat/multilingual-e5-small` embeddings
|
|
18
|
+
- **Knowledge Graph** โ NetworkX-based entity-relation graph with multi-hop traversal
|
|
19
|
+
- **GraphRAG Hybrid Retrieval** (opt-in) โ Vector similarity + graph traversal with RL re-ranker (11d features)
|
|
20
|
+
- **Multi-Resolution Text** โ 3 levels (full text, keyword summary, entity triples) with token-budget-aware composition
|
|
21
|
+
- **Forgetting Pipeline** โ Decay-based aging with compress โ deactivate โ delete stages
|
|
22
|
+
- **Sleep Cycle** โ Periodic maintenance: consolidation, resolution regeneration, forgetting, checkpoint saving
|
|
23
|
+
- **Immutable Memories** โ Protected from modification/deletion with SHA-256 rule hash verification
|
|
24
|
+
- **Pin/Unpin** โ User-controlled forgetting protection
|
|
25
|
+
- **Multilingual Support** โ Korean (ko) and English (en) i18n patterns
|
|
26
|
+
- **P2P Federated Learning** โ Gossip protocol with differential privacy and Krum aggregation
|
|
27
|
+
- **A/B Comparison Framework** โ Baseline vs re-ranked retrieval comparison
|
|
28
|
+
- **CI/CD** โ GitHub Actions with Python 3.11/3.12/3.13 matrix
|
|
29
|
+
- **611 tests** passing across 31 test files
|
|
30
|
+
|
|
31
|
+
### Removed
|
|
32
|
+
|
|
33
|
+
- Deprecated DualHeadDQN offline training pipeline (replaced by online MLP bandit)
|
|
34
|
+
- `ExtractorConfig` (unused after DQN removal)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# AIMemory Project
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This project uses Claude Code with team agents for collaborative AI-powered tasks.
|
|
5
|
+
|
|
6
|
+
## Conventions
|
|
7
|
+
- Use the `.claude/agents/` directory for custom agent definitions
|
|
8
|
+
- Agents are defined as markdown files describing their role, tools, and instructions
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AIMemory Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mcp-memory-server
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Intelligent memory MCP server for AI assistants โ auto-save, semantic search, RL-powered retrieval, and knowledge graphs
|
|
5
|
+
Project-URL: Homepage, https://github.com/ihwoo/mcp-memory-server
|
|
6
|
+
Project-URL: Repository, https://github.com/ihwoo/mcp-memory-server
|
|
7
|
+
Project-URL: Issues, https://github.com/ihwoo/mcp-memory-server/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/ihwoo/mcp-memory-server/blob/main/CHANGELOG.md
|
|
9
|
+
Author: ihwoo
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: ai,chatbot,claude,knowledge-graph,llm,mcp,memory,rag,reinforcement-learning
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Requires-Python: <3.14,>=3.11
|
|
22
|
+
Requires-Dist: chromadb>=0.5.0
|
|
23
|
+
Requires-Dist: mcp[cli]>=1.2.0
|
|
24
|
+
Requires-Dist: pydantic>=2.0
|
|
25
|
+
Requires-Dist: sentence-transformers>=3.0
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
29
|
+
Provides-Extra: ko
|
|
30
|
+
Requires-Dist: mecab-ko-dic>=1.0.0; extra == 'ko'
|
|
31
|
+
Requires-Dist: mecab-python3>=1.0.9; extra == 'ko'
|
|
32
|
+
Provides-Extra: train
|
|
33
|
+
Requires-Dist: matplotlib>=3.8; extra == 'train'
|
|
34
|
+
Requires-Dist: ollama>=0.4.0; extra == 'train'
|
|
35
|
+
Requires-Dist: pandas>=2.0; extra == 'train'
|
|
36
|
+
Requires-Dist: pyarrow>=15.0; extra == 'train'
|
|
37
|
+
Requires-Dist: tqdm>=4.66; extra == 'train'
|
|
38
|
+
Description-Content-Type: text/markdown
|
|
39
|
+
|
|
40
|
+
# AIMemory
|
|
41
|
+
|
|
42
|
+
**Intelligent memory for AI assistants that actually remembers.**
|
|
43
|
+
|
|
44
|
+
> Drop-in MCP server that gives Claude (and any MCP client) persistent, searchable, self-organizing memory โ powered by semantic search, knowledge graphs, and reinforcement learning.
|
|
45
|
+
|
|
46
|
+
[](https://github.com/ihwoo/mcp-memory-server/actions)
|
|
47
|
+
[](https://pypi.org/project/mcp-memory-server/)
|
|
48
|
+
[](https://pypi.org/project/mcp-memory-server/)
|
|
49
|
+
[](https://opensource.org/licenses/MIT)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Why AIMemory?
|
|
54
|
+
|
|
55
|
+
Current AI memory tools have two critical problems:
|
|
56
|
+
|
|
57
|
+
| Problem | How AIMemory solves it |
|
|
58
|
+
|---------|----------------------|
|
|
59
|
+
| **Manual retrieval** โ you must ask "do you remember X?" | `auto_search` runs every turn, injecting relevant memories automatically |
|
|
60
|
+
| **Token waste** โ entire memory dump inserted into context | Multi-resolution composer selects top-K memories within a token budget |
|
|
61
|
+
|
|
62
|
+
## Key Features
|
|
63
|
+
|
|
64
|
+
- **RL-powered policy** โ Contextual bandit decides when to save, skip, or retrieve (not just keyword matching)
|
|
65
|
+
- **Semantic search** โ ChromaDB + multilingual sentence-transformer embeddings (`intfloat/multilingual-e5-small`)
|
|
66
|
+
- **Knowledge graph** โ Entity-relation graph (NetworkX) for multi-hop reasoning ("who likes what?")
|
|
67
|
+
- **GraphRAG hybrid retrieval** โ Vector similarity + graph traversal, fused and re-ranked by an RL re-ranker
|
|
68
|
+
- **Multi-resolution text** โ Full text โ summary โ entity triples, composed within token budget
|
|
69
|
+
- **Forgetting pipeline** โ Decay-based aging with consolidation, pinning, and immutable protection
|
|
70
|
+
- **Sleep cycle** โ Periodic maintenance: dedup, compress, forget, checkpoint
|
|
71
|
+
- **Multilingual** โ Korean and English pattern support out of the box
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Quick Start (2 minutes)
|
|
76
|
+
|
|
77
|
+
### 1. Install
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pip install mcp-memory-server
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Or with [uv](https://docs.astral.sh/uv/):
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
uv pip install mcp-memory-server
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
<details>
|
|
90
|
+
<summary>Optional: Korean NLP support</summary>
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pip install mcp-memory-server[ko]
|
|
94
|
+
```
|
|
95
|
+
</details>
|
|
96
|
+
|
|
97
|
+
### 2. Connect to Claude Desktop
|
|
98
|
+
|
|
99
|
+
Add to your `claude_desktop_config.json`:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"mcpServers": {
|
|
104
|
+
"aimemory": {
|
|
105
|
+
"command": "aimemory-mcp"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
That's it. Claude now has persistent memory across all conversations.
|
|
112
|
+
|
|
113
|
+
<details>
|
|
114
|
+
<summary>Advanced: custom data path or uv project mode</summary>
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"mcpServers": {
|
|
119
|
+
"aimemory": {
|
|
120
|
+
"command": "uv",
|
|
121
|
+
"args": ["run", "--project", "/path/to/AIMemory", "aimemory-mcp"],
|
|
122
|
+
"env": {
|
|
123
|
+
"AIMEMORY_DB_PATH": "/path/to/memory_db"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
</details>
|
|
130
|
+
|
|
131
|
+
### 3. Connect to Claude Code
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
claude mcp add aimemory -- aimemory-mcp
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## MCP Tools (12)
|
|
140
|
+
|
|
141
|
+
| Tool | Description |
|
|
142
|
+
|------|-------------|
|
|
143
|
+
| `auto_search` | Auto-retrieve relevant memories at turn start (multi-resolution context) |
|
|
144
|
+
| `memory_save` | Save a new memory with keywords, category, and relations |
|
|
145
|
+
| `memory_search` | Semantic similarity search |
|
|
146
|
+
| `memory_update` | Update content or keywords of an existing memory |
|
|
147
|
+
| `memory_delete` | Delete a memory (respects immutability) |
|
|
148
|
+
| `memory_get_related` | BFS graph traversal for related memories |
|
|
149
|
+
| `memory_pin` / `memory_unpin` | Protect memories from forgetting |
|
|
150
|
+
| `memory_stats` | Total count and category breakdown |
|
|
151
|
+
| `sleep_cycle_run` | Trigger maintenance (consolidation + forgetting + checkpoint) |
|
|
152
|
+
| `policy_status` | RL policy state (epsilon, action distribution, updates) |
|
|
153
|
+
| `policy_decide` | Ask the RL policy for a SAVE/SKIP/RETRIEVE decision with reasoning |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Configuration
|
|
158
|
+
|
|
159
|
+
All settings via environment variables:
|
|
160
|
+
|
|
161
|
+
| Variable | Default | Description |
|
|
162
|
+
|----------|---------|-------------|
|
|
163
|
+
| `AIMEMORY_DB_PATH` | `./memory_db` | ChromaDB persistence directory |
|
|
164
|
+
| `AIMEMORY_LANGUAGE` | `ko` | Language for pattern matching (`ko` / `en`) |
|
|
165
|
+
| `AIMEMORY_EMBEDDING_MODEL` | `intfloat/multilingual-e5-small` | Sentence-transformer model |
|
|
166
|
+
| `AIMEMORY_LOG_LEVEL` | `INFO` | Logging level |
|
|
167
|
+
| `AIMEMORY_ENHANCED_POLICY` | `0` | Enable 778d enhanced RL policy (`1` to enable) |
|
|
168
|
+
| `AIMEMORY_GRAPH_RAG` | `0` | Enable GraphRAG hybrid retrieval (`1` to enable) |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Architecture
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
176
|
+
โ MCP Client โ
|
|
177
|
+
โ (Claude Desktop / Claude Code) โ
|
|
178
|
+
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
179
|
+
โ stdio (JSON-RPC)
|
|
180
|
+
โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
181
|
+
โ FastMCP Server (12 tools) โ
|
|
182
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
183
|
+
โ MemoryBridge (orchestrator) โ
|
|
184
|
+
โโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโค
|
|
185
|
+
โ RL Policyโ Retrievalโ Storage โ Maintenance โ
|
|
186
|
+
โ โ โ โ โ
|
|
187
|
+
โ Rule- โ ChromaDB โ Graph โ Sleep Cycle โ
|
|
188
|
+
โ Based + โ vector + โ Memory โ (consolidation, โ
|
|
189
|
+
โ MLP โ Knowledgeโ Store โ forgetting, โ
|
|
190
|
+
โ Bandit โ Graph โ โ checkpoints) โ
|
|
191
|
+
โ โ (GraphRAG)โ โ โ
|
|
192
|
+
โ Re-rankerโ โ โ โ
|
|
193
|
+
โ (11d MLP)โ โ โ โ
|
|
194
|
+
โโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโ
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Development
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Clone and install dev dependencies
|
|
203
|
+
git clone https://github.com/ihwoo/mcp-memory-server.git
|
|
204
|
+
cd mcp-memory-server
|
|
205
|
+
uv sync --extra dev
|
|
206
|
+
|
|
207
|
+
# Run tests (611 tests)
|
|
208
|
+
uv run pytest tests/ -q
|
|
209
|
+
|
|
210
|
+
# Lint & format
|
|
211
|
+
uv run ruff check src/ tests/
|
|
212
|
+
uv run ruff format src/ tests/
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## License
|
|
218
|
+
|
|
219
|
+
MIT โ see [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# AIMemory ํ๋ก์ ํธ ์ ๋ฆฌ
|
|
2
|
+
|
|
3
|
+
> ์์ฑ์ผ: 2026-02-28 | v0.1.0
|
|
4
|
+
|
|
5
|
+
## 1. ํ๋ก์ ํธ ๊ฐ์
|
|
6
|
+
|
|
7
|
+
**AI Memory System** โ AI ์ฑ๋ด์ด ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ๊ธฐ์ตํ๊ณ ํ์ฉํ๋ ์์คํ
.
|
|
8
|
+
|
|
9
|
+
ํต์ฌ ๋ฌธ์ ํด๊ฒฐ:
|
|
10
|
+
- **์๋ ๊ฒ์ ๋ฌธ์ **: ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์์ฒญํด์ผ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉ โ ๋งค ํด ์๋ ๊ฒ์
|
|
11
|
+
- **ํ ํฐ ๋ญ๋น ๋ฌธ์ **: ์ ์ฒด ๊ธฐ์ต์ ๋งค๋ฒ context์ ์ฝ์
โ top-K ์ ๋ณ + ๋คํด์๋ ์์ถ
|
|
12
|
+
|
|
13
|
+
## 2. ์์คํ
์ํคํ
์ฒ
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
์ฌ์ฉ์ ๋ฉ์์ง
|
|
17
|
+
โ
|
|
18
|
+
โผ
|
|
19
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
20
|
+
โ State Encoder (394d) โ ํ
์คํธ ์๋ฒ ๋ฉ(384d) + ์์์
ํน์ง(10d)
|
|
21
|
+
โ โ Action Selection โ SAVE / SKIP / RETRIEVE (Contextual Bandit)
|
|
22
|
+
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโ
|
|
23
|
+
โ
|
|
24
|
+
โโโโโโโโโโโผโโโโโโโโโโ
|
|
25
|
+
โผ โผ โผ
|
|
26
|
+
SAVE SKIP RETRIEVE
|
|
27
|
+
โ โ
|
|
28
|
+
โผ โผ
|
|
29
|
+
โโโโโโโโโโ โโโโโโโโโโโโโโโโ
|
|
30
|
+
โGraphRAGโ โContext โ
|
|
31
|
+
โStore โโโโโโโบโComposer โ
|
|
32
|
+
โ(Chroma)โ โ(Token Budget)โ
|
|
33
|
+
โโโโโโโโโโ โโโโโโโโโโโโโโโโ
|
|
34
|
+
โ
|
|
35
|
+
โผ (์ฃผ๊ธฐ์ )
|
|
36
|
+
โโโโโโโโโโโโโโโ
|
|
37
|
+
โSleep Cycle โ ๋ง๊ฐ ยท ํตํฉ ยท ์ฌ์ธ์ฝ๋ฉ
|
|
38
|
+
โโโโโโโโโโโโโโโ
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 6 ๋ ์ด์ด
|
|
42
|
+
|
|
43
|
+
| ๋ ์ด์ด | ๋ชจ๋ | ์ญํ |
|
|
44
|
+
|--------|------|------|
|
|
45
|
+
| 1. Policy | `online/policy.py`, `online/enhanced_policy.py` | Feature โ Action (SAVE/SKIP/RETRIEVE) |
|
|
46
|
+
| 2. Rule Filter | `online/rule_verifier.py` | ๋ถ๋ณ ๊ท์น (๋ณด์/ํ๋ผ์ด๋ฒ์) |
|
|
47
|
+
| 3. Storage | `memory/graph_store.py`, `memory/knowledge_graph.py` | ChromaDB + Knowledge Graph |
|
|
48
|
+
| 4. Retrieval | `memory/graph_retriever.py`, `online/reranker.py` | Vector search + RL Re-ranking |
|
|
49
|
+
| 5. Composer | `memory/composer.py`, `memory/resolution.py` | ํ ํฐ budget ๋ด ์ต์ ์กฐํฉ + ๋คํด์๋ ์์ถ |
|
|
50
|
+
| 6. Sleep Cycle | `memory/sleep_cycle.py`, `memory/forgetting.py`, `memory/consolidation.py` | ์ฃผ๊ธฐ์ ๊ธฐ์ต ์ ๋ฆฌ |
|
|
51
|
+
|
|
52
|
+
## 3. ๋ชจ๋ ๊ตฌ์กฐ
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
src/aimemory/ # 9,709 lines
|
|
56
|
+
โโโ __init__.py
|
|
57
|
+
โโโ config.py # ์ ์ฒด ์ค์ (Pydantic)
|
|
58
|
+
โโโ schemas.py # ๋ฐ์ดํฐ ๋ชจ๋ธ (Turn, Episode, MemoryActionType)
|
|
59
|
+
โ
|
|
60
|
+
โโโ i18n/ # ๋ค๊ตญ์ด ์ง์
|
|
61
|
+
โ โโโ __init__.py # LanguagePatterns ๋ ์ง์คํธ๋ฆฌ
|
|
62
|
+
โ โโโ ko.py # ํ๊ตญ์ด ํจํด (์ ๊ท์ 40+๊ฐ)
|
|
63
|
+
โ โโโ en.py # ์์ด ํจํด
|
|
64
|
+
โ
|
|
65
|
+
โโโ mcp/ # MCP ์๋ฒ (12 tools)
|
|
66
|
+
โ โโโ __init__.py
|
|
67
|
+
โ โโโ __main__.py # python -m aimemory.mcp
|
|
68
|
+
โ โโโ server.py # FastMCP ์๋ฒ ์ ์
|
|
69
|
+
โ โโโ bridge.py # Policy โ MCP ์ฐ๊ฒฐ
|
|
70
|
+
โ
|
|
71
|
+
โโโ memory/ # ๊ธฐ์ต ์ ์ฅ/๊ฒ์/๊ด๋ฆฌ
|
|
72
|
+
โ โโโ graph_store.py # ChromaDB + sentence-transformers
|
|
73
|
+
โ โโโ knowledge_graph.py # ํธ๋ฆฌํ ๊ธฐ๋ฐ ์ง์ ๊ทธ๋ํ
|
|
74
|
+
โ โโโ graph_retriever.py # ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ (Vector + Graph)
|
|
75
|
+
โ โโโ composer.py # Context ์กฐํฉ (ํ ํฐ budget)
|
|
76
|
+
โ โโโ resolution.py # ๋คํด์๋ ํ
์คํธ (L0/L1/L2)
|
|
77
|
+
โ โโโ forgetting.py # ๋ง๊ฐ ํ์ดํ๋ผ์ธ
|
|
78
|
+
โ โโโ consolidation.py # ๊ธฐ์ต ํตํฉ
|
|
79
|
+
โ โโโ sleep_cycle.py # ์๋ฉด ์ฌ์ดํด ์ค์ผ์คํธ๋ ์ด์
|
|
80
|
+
โ
|
|
81
|
+
โโโ online/ # RL ์จ๋ผ์ธ ํ์ต
|
|
82
|
+
โ โโโ policy.py # Contextual Bandit (10d โ 3 actions)
|
|
83
|
+
โ โโโ enhanced_policy.py # Enhanced MLP (394d โ 3 actions)
|
|
84
|
+
โ โโโ enhanced_encoder.py # 384d embedding + 10d features
|
|
85
|
+
โ โโโ replay_buffer.py # Experience replay
|
|
86
|
+
โ โโโ autonomy.py # Progressive autonomy (์ ๋ขฐ๋ ๊ธฐ๋ฐ)
|
|
87
|
+
โ โโโ reranker.py # RL Re-ranker (๊ฒ์ ๊ฒฐ๊ณผ ์ฌ์ ๋ ฌ)
|
|
88
|
+
โ โโโ ab_comparator.py # A/B ๋น๊ต ํ
์คํธ
|
|
89
|
+
โ โโโ gossip.py # P2P Federated Learning (Gossip)
|
|
90
|
+
โ โโโ rule_verifier.py # ๋ถ๋ณ ๊ท์น ํํฐ
|
|
91
|
+
โ โโโ transport.py # P2P ํต์ ๊ณ์ธต
|
|
92
|
+
โ
|
|
93
|
+
โโโ reward/ # ๋ณด์ ๊ณ์ฐ
|
|
94
|
+
โ โโโ calculator.py # ์ข
ํฉ ๋ณด์ ๊ณ์ฐ๊ธฐ
|
|
95
|
+
โ โโโ feedback_detector.py # ์ฌ์ฉ์ ํผ๋๋ฐฑ ๊ฐ์ง (๊ธ์ /๋ถ์ /๊ต์ )
|
|
96
|
+
โ โโโ implicit_detector.py # ์๋ฌต์ ๋ณด์ ๊ฐ์ง
|
|
97
|
+
โ โโโ korean_patterns.py # (legacy) ํ๊ตญ์ด ํจํด
|
|
98
|
+
โ โโโ signals.py # ๋ณด์ ์ ํธ ์ ์
|
|
99
|
+
โ
|
|
100
|
+
โโโ dataset/ # ํ์ต ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
|
|
101
|
+
โ โโโ builder.py # Episode โ ํ์ต ๋ฐ์ดํฐ ๋ณํ
|
|
102
|
+
โ โโโ splitter.py # Train/Val/Test ๋ถ๋ฆฌ
|
|
103
|
+
โ โโโ stats.py # ๋ฐ์ดํฐ์
ํต๊ณ
|
|
104
|
+
โ
|
|
105
|
+
โโโ extractor/ # Offline RL Feature Extractor
|
|
106
|
+
โ โโโ encoder.py # Feature ์ธ์ฝ๋
|
|
107
|
+
โ โโโ model.py # DualHeadDQN
|
|
108
|
+
โ โโโ dataset.py # DQN ํ์ต ๋ฐ์ดํฐ
|
|
109
|
+
โ โโโ policy.py # ์ถ์ถ ์ ์ฑ
|
|
110
|
+
โ โโโ trainer.py # ํ์ต ๋ฃจํ
|
|
111
|
+
โ
|
|
112
|
+
โโโ selfplay/ # Self-play ๋ฐ์ดํฐ ์์ฑ
|
|
113
|
+
โโโ engine.py # Self-play ์์ง
|
|
114
|
+
โโโ llm_client.py # Ollama ํด๋ผ์ด์ธํธ
|
|
115
|
+
โโโ memory_agent.py # ๋ฉ๋ชจ๋ฆฌ ์์ด์ ํธ
|
|
116
|
+
โโโ scenarios.py # ์๋๋ฆฌ์ค ๊ด๋ฆฌ
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 4. ํ
์คํธ ํํฉ
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
tests/ # 8,491 lines, 619 tests
|
|
123
|
+
โโโ test_i18n.py # ๋ค๊ตญ์ด ํจํด (ko/en)
|
|
124
|
+
โโโ test_mcp_server.py # MCP ์๋ฒ
|
|
125
|
+
โโโ test_mcp_bridge.py # MCP ๋ธ๋ฆฟ์ง
|
|
126
|
+
โโโ test_mcp_e2e.py # MCP E2E
|
|
127
|
+
โโโ test_graph_store.py # ChromaDB ์ ์ฅ์
|
|
128
|
+
โโโ test_graph_retriever.py # ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์
|
|
129
|
+
โโโ test_knowledge_graph.py # ์ง์ ๊ทธ๋ํ
|
|
130
|
+
โโโ test_online_policy.py # Contextual Bandit
|
|
131
|
+
โโโ test_enhanced_policy.py # Enhanced Policy
|
|
132
|
+
โโโ test_enhanced_encoder.py # Enhanced Encoder
|
|
133
|
+
โโโ test_replay_buffer.py # Replay Buffer
|
|
134
|
+
โโโ test_reranker.py # Re-ranker
|
|
135
|
+
โโโ test_ab_comparator.py # A/B ๋น๊ต
|
|
136
|
+
โโโ test_gossip.py # Gossip Protocol
|
|
137
|
+
โโโ test_transport.py # P2P Transport
|
|
138
|
+
โโโ test_autonomy.py # Progressive Autonomy
|
|
139
|
+
โโโ test_rule_verifier.py # Rule Verifier
|
|
140
|
+
โโโ test_reward_calculator.py # ๋ณด์ ๊ณ์ฐ
|
|
141
|
+
โโโ test_feedback_detector.py # ํผ๋๋ฐฑ ๊ฐ์ง
|
|
142
|
+
โโโ test_implicit_detector.py # ์๋ฌต์ ๋ณด์
|
|
143
|
+
โโโ test_resolution.py # ๋คํด์๋ ํ
์คํธ
|
|
144
|
+
โโโ test_composer.py # Context Composer
|
|
145
|
+
โโโ test_forgetting.py # ๋ง๊ฐ ํ์ดํ๋ผ์ธ
|
|
146
|
+
โโโ test_sleep_cycle.py # ์๋ฉด ์ฌ์ดํด
|
|
147
|
+
โโโ test_extractor.py # Feature Extractor
|
|
148
|
+
โโโ test_e2e_enhanced.py # Enhanced E2E
|
|
149
|
+
โโโ test_dataset_builder.py # ๋ฐ์ดํฐ์
๋น๋
|
|
150
|
+
โโโ test_schemas.py # ์คํค๋ง
|
|
151
|
+
โโโ test_selfplay_engine.py # Self-play (ollama ํ์, skip)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**๊ฒฐ๊ณผ**: 619 passed, 1 skipped (14.6s)
|
|
155
|
+
|
|
156
|
+
## 5. ํต์ฌ ๊ธฐ์
|
|
157
|
+
|
|
158
|
+
### 5.1 Contextual Bandit Policy
|
|
159
|
+
- **State**: 394d feature vector (384d multilingual embedding + 10d hand-crafted)
|
|
160
|
+
- **Actions**: SAVE(0), SKIP(1), RETRIEVE(2)
|
|
161
|
+
- **Reward**: ์ฌ์ฉ์ ํผ๋๋ฐฑ ๊ธฐ๋ฐ (๊ธ์ +1.0, ๋ถ์ -1.0, ์๋ฌต์ ๋ณด์ ํฌํจ)
|
|
162
|
+
- **ํ์ต**: Online MLP + Experience Replay + Epsilon-greedy
|
|
163
|
+
|
|
164
|
+
### 5.2 GraphRAG Storage
|
|
165
|
+
- **Vector Store**: ChromaDB + `intfloat/multilingual-e5-small` (384d)
|
|
166
|
+
- **Knowledge Graph**: ํธ๋ฆฌํ ๊ธฐ๋ฐ (`subject โ predicate โ object`)
|
|
167
|
+
- **Hybrid Retrieval**: Vector similarity + Graph traversal ๊ฒฐํฉ
|
|
168
|
+
|
|
169
|
+
### 5.3 ๋คํด์๋ ํ
์คํธ
|
|
170
|
+
- **L0**: ์๋ณธ ํ
์คํธ
|
|
171
|
+
- **L1**: ํต์ฌ ์ ๋ณด ์ถ์ถ (์ฃผ์ด+์ ์ด)
|
|
172
|
+
- **L2**: ํค์๋ ์์ถ
|
|
173
|
+
- Context Composer๊ฐ ํ ํฐ budget์ ๋ง๊ฒ ์ ์ ํ ๋ ๋ฒจ ์ ํ
|
|
174
|
+
|
|
175
|
+
### 5.4 ์๋ฉด ์ฌ์ดํด
|
|
176
|
+
- ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ: ๋ง๊ฐ โ ํตํฉ โ ์ฌ์ธ์ฝ๋ฉ
|
|
177
|
+
- **๋ง๊ฐ**: ์ ๊ทผ ๋น๋ ๋ฎ์ ๊ธฐ์ต ์ญ์ (pinned/immutable ๋ณดํธ)
|
|
178
|
+
- **ํตํฉ**: ์ ์ฌ ๊ธฐ์ต ๋ณํฉ
|
|
179
|
+
- **์ฌ์ธ์ฝ๋ฉ**: ์๋ฒ ๋ฉ ์ฌ์์ฑ
|
|
180
|
+
|
|
181
|
+
### 5.5 ๋ค๊ตญ์ด ์ง์ (i18n)
|
|
182
|
+
- `LanguagePatterns` ๋ฐ์ดํฐ ํด๋์ค๋ก ์ธ์ด๋ณ ํจํด ๋ถ๋ฆฌ
|
|
183
|
+
- ํ์ฌ ์ง์: ํ๊ตญ์ด (`ko`), ์์ด (`en`)
|
|
184
|
+
- `register()` ํจ์๋ก ์ ์ธ์ด ์ถ๊ฐ ๊ฐ๋ฅ
|
|
185
|
+
|
|
186
|
+
## 6. MCP ์๋ฒ ๋๊ตฌ (12๊ฐ)
|
|
187
|
+
|
|
188
|
+
| ๋๊ตฌ | ์ค๋ช
|
|
|
189
|
+
|------|------|
|
|
190
|
+
| `auto_search` | ๋งค ํด ์๋ ๊ธฐ์ต ๊ฒ์ |
|
|
191
|
+
| `memory_save` | ๊ธฐ์ต ์ ์ฅ |
|
|
192
|
+
| `memory_search` | ๋ช
์์ ๊ธฐ์ต ๊ฒ์ |
|
|
193
|
+
| `memory_update` | ๊ธฐ์ต ์์ |
|
|
194
|
+
| `memory_delete` | ๊ธฐ์ต ์ญ์ |
|
|
195
|
+
| `memory_stats` | ๊ธฐ์ต ํต๊ณ |
|
|
196
|
+
| `memory_list` | ๊ธฐ์ต ๋ชฉ๋ก |
|
|
197
|
+
| `memory_get` | ๊ธฐ์ต ์์ธ ์กฐํ |
|
|
198
|
+
| `graph_query` | ์ง์ ๊ทธ๋ํ ์ฟผ๋ฆฌ |
|
|
199
|
+
| `graph_add_triple` | ํธ๋ฆฌํ ์ถ๊ฐ |
|
|
200
|
+
| `sleep_cycle` | ์๋ฉด ์ฌ์ดํด ์๋ ์คํ |
|
|
201
|
+
| `policy_stats` | ์ ์ฑ
ํต๊ณ |
|
|
202
|
+
|
|
203
|
+
## 7. ์์กด์ฑ
|
|
204
|
+
|
|
205
|
+
### Core
|
|
206
|
+
```
|
|
207
|
+
pydantic>=2.0
|
|
208
|
+
chromadb>=0.5.0
|
|
209
|
+
sentence-transformers>=3.0
|
|
210
|
+
mcp[cli]>=1.2.0
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Optional
|
|
214
|
+
```
|
|
215
|
+
[ko] mecab-python3, mecab-ko-dic # ํ๊ตญ์ด ํํ์ ๋ถ์
|
|
216
|
+
[dev] pytest, ruff # ๊ฐ๋ฐ
|
|
217
|
+
[train] ollama, pandas, pyarrow, tqdm, matplotlib # ํ์ต
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## 8. ์ค์น ๋ฐ ์คํ
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# ๊ธฐ๋ณธ ์ค์น
|
|
224
|
+
uv sync
|
|
225
|
+
|
|
226
|
+
# ํ๊ตญ์ด ์ง์ ํฌํจ
|
|
227
|
+
uv sync --extra ko
|
|
228
|
+
|
|
229
|
+
# ๊ฐ๋ฐ ํ๊ฒฝ
|
|
230
|
+
uv sync --extra dev --extra ko
|
|
231
|
+
|
|
232
|
+
# ํ
์คํธ
|
|
233
|
+
uv run pytest tests/ -q
|
|
234
|
+
|
|
235
|
+
# MCP ์๋ฒ ์คํ
|
|
236
|
+
uv run python -m aimemory.mcp
|
|
237
|
+
|
|
238
|
+
# OpenClaw ์ฐ๋
|
|
239
|
+
bash scripts/install_openclaw.sh
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 9. ํ๊ฒฝ ๋ณ์
|
|
243
|
+
|
|
244
|
+
| ๋ณ์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
245
|
+
|------|--------|------|
|
|
246
|
+
| `AIMEMORY_DB_PATH` | `./memory_db` | ChromaDB ์ ์ฅ ๊ฒฝ๋ก |
|
|
247
|
+
| `AIMEMORY_LANGUAGE` | `ko` | ์ธ์ด (`ko`, `en`) |
|
|
248
|
+
| `AIMEMORY_EMBEDDING_MODEL` | `intfloat/multilingual-e5-small` | ์๋ฒ ๋ฉ ๋ชจ๋ธ |
|
|
249
|
+
| `AIMEMORY_LOG_LEVEL` | `WARNING` | ๋ก๊ทธ ๋ ๋ฒจ |
|
|
250
|
+
| `AIMEMORY_TOKEN_BUDGET` | `500` | ๊ฒ์ ํ ํฐ budget |
|
|
251
|
+
| `AIMEMORY_EPSILON` | `0.15` | Epsilon-greedy ํ์๋ฅ |
|
|
252
|
+
|
|
253
|
+
## 10. ๊ตฌํ ์ด๋ ฅ
|
|
254
|
+
|
|
255
|
+
| Step | ๋ด์ฉ | ์ํ |
|
|
256
|
+
|------|------|------|
|
|
257
|
+
| 1 | ํ์ต ๋ฐ์ดํฐ ํ๋ณด (Self-play + ๊ณต๊ฐ ๋ฐ์ดํฐ) | โ
|
|
|
258
|
+
| 2 | Rule-Based Baseline + Online MLP Bandit | โ
|
|
|
259
|
+
| 3 | ๋ง๊ฐ ํ์ดํ๋ผ์ธ + ๋คํด์๋ ์ ์ฅ | โ
|
|
|
260
|
+
| 4 | ์๋ฉด ์ฌ์ดํด + ๊ธฐ์ต ํตํฉ | โ
|
|
|
261
|
+
| 5 | RL Re-ranker | โ
|
|
|
262
|
+
| 6 | P2P Federated Learning (Gossip) | โ
|
|
|
263
|
+
| 7 | MCP ์๋ฒ ํจํค์ง | โ
|
|
|
264
|
+
| 8 | GraphRAG Integration + Enhanced Policy | โ
|
|
|
265
|
+
| 9 | ๋ค๊ตญ์ด(i18n) + ์ค์น ํ์ดํ๋ผ์ธ + ๋ฐฐํฌ ์ค๋น | โ
|
|
|
266
|
+
|
|
267
|
+
## 11. ๋ฐฐํฌ ๋ฐฉ๋ฒ
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# 1. ๋น๋
|
|
271
|
+
uv build
|
|
272
|
+
# โ dist/aimemory-0.1.0.tar.gz
|
|
273
|
+
# โ dist/aimemory-0.1.0-py3-none-any.whl
|
|
274
|
+
|
|
275
|
+
# 2. TestPyPI์ ๋จผ์ ํ
์คํธ
|
|
276
|
+
uv publish --publish-url https://test.pypi.org/legacy/
|
|
277
|
+
|
|
278
|
+
# 3. PyPI ๋ฐฐํฌ
|
|
279
|
+
uv publish
|
|
280
|
+
# PyPI API token ํ์: https://pypi.org/manage/account/token/
|
|
281
|
+
|
|
282
|
+
# 4. ์ค์น ํ์ธ
|
|
283
|
+
pip install aimemory
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## 12. ์ฝ๋ ๊ท๋ชจ
|
|
287
|
+
|
|
288
|
+
| ํญ๋ชฉ | ์์น |
|
|
289
|
+
|------|------|
|
|
290
|
+
| ์์ค ์ฝ๋ | 51๊ฐ ํ์ผ, 9,709 ์ค |
|
|
291
|
+
| ํ
์คํธ ์ฝ๋ | 31๊ฐ ํ์ผ, 8,491 ์ค |
|
|
292
|
+
| ํ
์คํธ ์ | 619 passed, 1 skipped |
|
|
293
|
+
| ์คํฌ๋ฆฝํธ | 14๊ฐ |
|
|
294
|
+
| MCP ๋๊ตฌ | 12๊ฐ |
|
|
295
|
+
| ์ง์ ์ธ์ด | 2 (ko, en) |
|