Skip to main content

Universal memory module for LLMs

Project description

๐Ÿง  Greeum v0.6.0

๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด | ๐Ÿ‡บ๐Ÿ‡ธ English | ๐Ÿ‡จ๐Ÿ‡ณ ไธญๆ–‡ | ๐Ÿ‡ฏ๐Ÿ‡ต ๆ—ฅๆœฌ่ชž | ๐Ÿ‡ช๐Ÿ‡ธ Espaรฑol | ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch | ๐Ÿ‡ซ๐Ÿ‡ท Franรงais

๋‹ค๊ตญ์–ด ์ง€์› LLM ๋…๋ฆฝ์ ์ธ ๊ธฐ์–ต ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

๐Ÿ“Œ ๊ฐœ์š”

Greeum (๋ฐœ์Œ: ๊ทธ๋ฆฌ์Œ)์€ ๋ชจ๋“  LLM(๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ)์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ๊ธฐ์–ต ๋ชจ๋“ˆ๋กœ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์‚ฌ์šฉ์ž์˜ ๋ฐœํ™”, ๋ชฉํ‘œ, ๊ฐ์ •, ์˜๋„ ๋“ฑ ์žฅ๊ธฐ์ ์ธ ๊ธฐ๋ก ์ถ”์ 
  • ํ˜„์žฌ ๋งฅ๋ฝ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ์–ต ํšŒ์ƒ
  • ๋‹ค๊ตญ์–ด ํ™˜๊ฒฝ์—์„œ์˜ ์‹œ๊ฐ„ ํ‘œํ˜„ ์ธ์‹ ๋ฐ ์ฒ˜๋ฆฌ
  • "๊ธฐ์–ต์„ ๊ฐ€์ง„ AI"๋กœ์„œ์˜ ๊ธฐ๋Šฅ

์ด๋ฆ„ "Greeum"์€ ํ•œ๊ตญ์–ด "๊ทธ๋ฆฌ์›€"์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜์œผ๋ฉฐ, ๊ธฐ์–ต ์‹œ์Šคํ…œ์˜ ๋ณธ์งˆ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Greeum์€ RAG(Retrieval-Augmented Generation) ์•„ํ‚คํ…์ฒ˜์— ๊ธฐ๋ฐ˜ํ•œ LLM ๋…๋ฆฝ์  ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ •๋ณด ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰(block_manager.py), ๊ด€๋ จ ๊ธฐ์–ต ๊ด€๋ฆฌ(cache_manager.py), ํ”„๋กฌํ”„ํŠธ ์ฆ๊ฐ•(prompt_wrapper.py) ๋“ฑ RAG์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋” ์ •ํ™•ํ•˜๊ณ  ๋งฅ๋ฝ์— ๋งž๋Š” ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”‘ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ธ”๋ก์ฒด์ธ ์œ ์‚ฌ ๊ตฌ์กฐ์˜ ์žฅ๊ธฐ ๊ธฐ์–ต(LTM): ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง„ ๋ธ”๋ก ๋‹จ์œ„ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ
  • TTL ๊ธฐ๋ฐ˜์˜ ๋‹จ๊ธฐ ๊ธฐ์–ต(STM): ์ผ์‹œ์ ์œผ๋กœ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ
  • ์˜๋ฏธ์  ์—ฐ๊ด€์„ฑ: ํ‚ค์›Œ๋“œ/ํƒœ๊ทธ/๋ฒกํ„ฐ ๊ธฐ๋ฐ˜ ๊ธฐ์–ต ํšŒ์ƒ ์‹œ์Šคํ…œ
  • ์›จ์ดํฌ์ธํŠธ ์บ์‹œ: ํ˜„์žฌ ๋งฅ๋ฝ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ์–ต์„ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰
  • ํ”„๋กฌํ”„ํŠธ ์กฐํ•ฉ๊ธฐ: ๊ด€๋ จ ๊ธฐ์–ต์„ ํฌํ•จํ•œ LLM ํ”„๋กฌํ”„ํŠธ ์ž๋™ ์ƒ์„ฑ
  • ์‹œ๊ฐ„์  ์ถ”๋ก ๊ธฐ: ๋‹ค๊ตญ์–ด ํ™˜๊ฒฝ์—์„œ ๊ณ ๊ธ‰ ์‹œ๊ฐ„ ํ‘œํ˜„ ์ธ์‹ ์ฒ˜๋ฆฌ
  • ๋‹ค๊ตญ์–ด ์ง€์›: ํ•œ๊ตญ์–ด, ์˜์–ด ๋“ฑ ์ž๋™ ์–ธ์–ด ๊ฐ์ง€ ๋ฐ ์ฒ˜๋ฆฌ
  • Model Control Protocol: GreeumMCP ๋ณ„๋„ ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด Cursor, Unity, Discord ๋“ฑ ์™ธ๋ถ€ ๋„๊ตฌ ์—ฐ๋™ ์ง€์›

โš™๏ธ ์„ค์น˜ ๋ฐฉ๋ฒ•

  1. ์ €์žฅ์†Œ ๋ณต์ œ

    git clone https://github.com/DryRainEnt/Greeum.git
    cd Greeum
    
  2. ์˜์กด์„ฑ ์„ค์น˜

    pip install -r requirements.txt
    

๐Ÿงช ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

CLI ์ธํ„ฐํŽ˜์ด์Šค

# ์žฅ๊ธฐ ๊ธฐ์–ต ์ถ”๊ฐ€
python cli/memory_cli.py add -c "์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ณ  ์ •๋ง ํฅ๋ฏธ๋กœ์›Œ์š”"

# ํ‚ค์›Œ๋“œ๋กœ ๊ธฐ์–ต ๊ฒ€์ƒ‰
python cli/memory_cli.py search -k "ํ”„๋กœ์ ํŠธ,ํฅ๋ฏธ๋กœ์šด"

# ์‹œ๊ฐ„ ํ‘œํ˜„์œผ๋กœ ๊ธฐ์–ต ๊ฒ€์ƒ‰
python cli/memory_cli.py search-time -q "3์ผ ์ „์— ๋ฌด์—‡์„ ํ–ˆ์ง€?" -l "ko"

# ๋‹จ๊ธฐ ๊ธฐ์–ต ์ถ”๊ฐ€
python cli/memory_cli.py stm "์˜ค๋Š˜ ๋‚ ์”จ๊ฐ€ ์ข‹๋„ค์š”"

# ๋‹จ๊ธฐ ๊ธฐ์–ต ์กฐํšŒ
python cli/memory_cli.py get-stm

# ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ
python cli/memory_cli.py prompt -i "ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‚˜์š”?"

REST API ์„œ๋ฒ„

# API ์„œ๋ฒ„ ์‹คํ–‰
python api/memory_api.py

์›น ์ธํ„ฐํŽ˜์ด์Šค: http://localhost:5000

API ์—”๋“œํฌ์ธํŠธ:

  • GET /api/v1/health - ์ƒํƒœ ํ™•์ธ
  • GET /api/v1/blocks - ๋ธ”๋ก ๋ชฉ๋ก ์กฐํšŒ
  • POST /api/v1/blocks - ๋ธ”๋ก ์ถ”๊ฐ€
  • GET /api/v1/search?keywords=keyword1,keyword2 - ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰
  • GET /api/v1/search/time?query=yesterday&language=en - ์‹œ๊ฐ„ ํ‘œํ˜„ ๊ฒ€์ƒ‰
  • GET, POST, DELETE /api/v1/stm - ๋‹จ๊ธฐ ๊ธฐ์–ต ๊ด€๋ฆฌ
  • POST /api/v1/prompt - ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ
  • GET /api/v1/verify - ๋ธ”๋ก์ฒด์ธ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ

Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

from greeum import BlockManager, STMManager, CacheManager, PromptWrapper
from greeum.text_utils import process_user_input
from greeum.temporal_reasoner import TemporalReasoner

# ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ
user_input = "์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ณ  ์ •๋ง ํฅ๋ฏธ๋กœ์›Œ์š”"
processed = process_user_input(user_input)

# ๋ธ”๋ก ๋งค๋‹ˆ์ €๋กœ ๊ธฐ์–ต ์ €์žฅ
block_manager = BlockManager()
block = block_manager.add_block(
    context=processed["context"],
    keywords=processed["keywords"],
    tags=processed["tags"],
    embedding=processed["embedding"],
    importance=processed["importance"]
)

# ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ (๋‹ค๊ตญ์–ด)
temporal_reasoner = TemporalReasoner(db_manager=block_manager, default_language="auto")
time_query = "3์ผ ์ „์— ๋ฌด์—‡์„ ํ–ˆ์ง€?"
time_results = temporal_reasoner.search_by_time_reference(time_query)

# ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ
cache_manager = CacheManager(block_manager=block_manager)
prompt_wrapper = PromptWrapper(cache_manager=cache_manager)

user_question = "ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‚˜์š”?"
prompt = prompt_wrapper.compose_prompt(user_question)

# LLM์— ์ „๋‹ฌ
# llm_response = call_your_llm(prompt)

๐Ÿงฑ ์•„ํ‚คํ…์ฒ˜

greeum/
โ”œโ”€โ”€ greeum/                # ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ”‚   โ”œโ”€โ”€ block_manager.py    # ์žฅ๊ธฐ ๊ธฐ์–ต ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ stm_manager.py      # ๋‹จ๊ธฐ ๊ธฐ์–ต ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ cache_manager.py    # ์›จ์ดํฌ์ธํŠธ ์บ์‹œ
โ”‚   โ”œโ”€โ”€ prompt_wrapper.py   # ํ”„๋กฌํ”„ํŠธ ์กฐํ•ฉ
โ”‚   โ”œโ”€โ”€ text_utils.py       # ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚   โ”œโ”€โ”€ temporal_reasoner.py # ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์ถ”๋ก 
โ”‚   โ”œโ”€โ”€ embedding_models.py  # ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ํ†ตํ•ฉ
โ”œโ”€โ”€ api/                   # REST API ์ธํ„ฐํŽ˜์ด์Šค
โ”œโ”€โ”€ cli/                   # ๋ช…๋ น์ค„ ๋„๊ตฌ
โ”œโ”€โ”€ data/                  # ๋ฐ์ดํ„ฐ ์ €์žฅ ๋””๋ ‰ํ† ๋ฆฌ
โ”œโ”€โ”€ tests/                 # ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ

๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๊ทœ์น™

  • main: ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „ ๋ธŒ๋žœ์น˜
  • dev: ํ•ต์‹ฌ ํ”ผ์ณ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜ (๊ฐœ๋ฐœ ํ›„ ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด main์œผ๋กœ ๋จธ์ง€)
  • test-collect: ์„ฑ๋Šฅ ์ง€ํ‘œ ๋ฐ A/B ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์šฉ ๋ธŒ๋žœ์น˜

๐Ÿ“Š ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ

Greeum์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜์—ญ์—์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

T-GEN-001: ์‘๋‹ต์˜ ๊ตฌ์ฒด์„ฑ ์ฆ๊ฐ€์œจ

  • Greeum ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉ ์‹œ ์‘๋‹ต ํ’ˆ์งˆ ํ–ฅ์ƒ๋„ ์ธก์ •
  • ํ‰๊ท  18.6% ํ’ˆ์งˆ ํ–ฅ์ƒ ํ™•์ธ
  • ๊ตฌ์ฒด์  ์ •๋ณด ํฌํ•จ๋Ÿ‰ 4.2๊ฐœ ์ฆ๊ฐ€

T-MEM-002: ๋ฉ”๋ชจ๋ฆฌ ๊ฒ€์ƒ‰ Latency

  • ์›จ์ดํฌ์ธํŠธ ์บ์‹œ๋ฅผ ํ†ตํ•œ ๊ฒ€์ƒ‰ ์†๋„ ํ–ฅ์ƒ ์ธก์ •
  • ํ‰๊ท  5.04๋ฐฐ ์†๋„ ํ–ฅ์ƒ ํ™•์ธ
  • 1,000๊ฐœ ์ด์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์—์„œ ์ตœ๋Œ€ 8.67๋ฐฐ ์†๋„ ๊ฐœ์„ 

T-API-001: API ํ˜ธ์ถœ ํšจ์œจ์„ฑ

  • ๊ธฐ์–ต ๊ธฐ๋ฐ˜ ๋งฅ๋ฝ ์ œ๊ณต์œผ๋กœ ์ธํ•œ ์žฌ์งˆ๋ฌธ ๊ฐ์†Œ์œจ ์ธก์ •
  • ์žฌ์งˆ๋ฌธ ํ•„์š”์„ฑ 78.2% ๊ฐ์†Œ ํ™•์ธ
  • API ํ˜ธ์ถœ ํšŸ์ˆ˜ ๊ฐ์†Œ๋กœ ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ

๐Ÿ“Š ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก ๊ตฌ์กฐ

{
  "block_index": 143,
  "timestamp": "2025-05-08T01:02:33",
  "context": "์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ณ  ์ •๋ง ํฅ๋ฏธ๋กœ์›Œ์š”",
  "keywords": ["ํ”„๋กœ์ ํŠธ", "์‹œ์ž‘", "ํฅ๋ฏธ๋กœ์šด"],
  "tags": ["๊ธ์ •์ ", "์‹œ์ž‘", "๋™๊ธฐ๋ถ€์—ฌ"],
  "embedding": [0.131, 0.847, ...],
  "importance": 0.91,
  "hash": "...",
  "prev_hash": "..."
}

๐Ÿ”ค ์ง€์› ์–ธ์–ด

Greeum์€ ๋‹ค์Œ ์–ธ์–ด์˜ ์‹œ๊ฐ„ ํ‘œํ˜„ ์ธ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  • ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด: ํ•œ๊ตญ์–ด ์‹œ๊ฐ„ ํ‘œํ˜„ ๊ธฐ๋ณธ ์ง€์› (์–ด์ œ, ์ง€๋‚œ์ฃผ, 3์ผ ์ „ ๋“ฑ)
  • ๐Ÿ‡บ๐Ÿ‡ธ ์˜์–ด: ์˜์–ด ์‹œ๊ฐ„ ํ˜•์‹ ์™„์ „ ์ง€์› (yesterday, 3 days ago ๋“ฑ)
  • ๐ŸŒ ์ž๋™ ๊ฐ์ง€: ์–ธ์–ด๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ์ ์ ˆํžˆ ์ฒ˜๋ฆฌ

๐Ÿ” ์‹œ๊ฐ„์  ์ถ”๋ก  ์˜ˆ์‹œ

# ํ•œ๊ตญ์–ด
result = evaluate_temporal_query("3์ผ ์ „์— ๋ญ ํ–ˆ์–ด?", language="ko")
# ๋ฐ˜ํ™˜๊ฐ’: {detected: True, language: "ko", best_ref: {term: "3์ผ ์ „"}}

# ์˜์–ด
result = evaluate_temporal_query("What did I do 3 days ago?", language="en")
# ๋ฐ˜ํ™˜๊ฐ’: {detected: True, language: "en", best_ref: {term: "3 days ago"}}

# ์ž๋™ ๊ฐ์ง€
result = evaluate_temporal_query("What happened yesterday?")
# ๋ฐ˜ํ™˜๊ฐ’: {detected: True, language: "en", best_ref: {term: "yesterday"}}

๐Ÿ”ง ํ”„๋กœ์ ํŠธ ํ™•์žฅ ๊ณ„ํš

  • Model Control Protocol: MCP ์ง€์›์— ๋Œ€ํ•ด์„œ๋Š” GreeumMCP ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š” - Greeum์„ Cursor, Unity, Discord ๋“ฑ์˜ ๋„๊ตฌ์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„์˜ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค
  • ๋‹ค๊ตญ์–ด ์ง€์› ๊ฐ•ํ™”: ์ผ๋ณธ์–ด, ์ค‘๊ตญ์–ด, ์ŠคํŽ˜์ธ์–ด ๋“ฑ ์ถ”๊ฐ€ ์–ธ์–ด ์ง€์›
  • ์ž„๋ฒ ๋”ฉ ๊ฐœ์„ : ์‹ค์ œ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ํ†ตํ•ฉ (์˜ˆ: sentence-transformers)
  • ํ‚ค์›Œ๋“œ ์ถ”์ถœ ํ–ฅ์ƒ: ์–ธ์–ด๋ณ„ ํ‚ค์›Œ๋“œ ์ถ”์ถœ ๊ตฌํ˜„
  • ํด๋ผ์šฐ๋“œ ํ†ตํ•ฉ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—”๋“œ ์ถ”๊ฐ€ (SQLite, MongoDB ๋“ฑ)
  • ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ: ๋Œ€๊ทœ๋ชจ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๊ตฌํ˜„

๐ŸŒ ์›น์‚ฌ์ดํŠธ

์›น์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ: greeum.app

๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License

๐Ÿ‘ฅ ๊ธฐ์—ฌ

๋ฒ„๊ทธ ๋ณด๊ณ , ๊ธฐ๋Šฅ ์ œ์•ˆ, ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๋“ฑ ๋ชจ๋“  ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

๐Ÿ“ฑ ์—ฐ๋ฝ์ฒ˜

์ด๋ฉ”์ผ: playtart@play-t.art

๐Ÿš€ v0.6.0 ํ•˜์ด๋ผ์ดํŠธ (Python 3.12 ์ง€์›)

ํ•ญ๋ชฉ ์„ค๋ช…
Python ํ˜ธํ™˜์„ฑ 3.10 / 3.11 / 3.12 ํ…Œ์ŠคํŠธ ํ†ต๊ณผ(Tox & CI)
Working Memory STMWorkingSet ๋กœ ํ™œ์„ฑ ์Šฌ๋กฏ ๊ด€๋ฆฌ
๊ฒ€์ƒ‰ ์„ฑ๋Šฅ FAISS ๋ฒกํ„ฐ ์ธ๋ฑ์Šค + BERT Cross-Encoder ์žฌ๋žญํฌ
ํ”„๋กฌํ”„ํŠธ ํ† ํฐ-Budget ๊ธฐ๋ฐ˜ ๊ธฐ์–ต ์‚ฝ์ž…, KeyBERT ๊ณ ๊ธ‰ ํ‚ค์›Œ๋“œ
Evolution ๋ธ”๋ก ์š”์•ฝ/๋ณ‘ํ•ฉ, ์ƒ์ถฉ ๋…ธํŠธ API

๋น ๋ฅธ ์„ค์น˜ (Python 3.12 + ๋ชจ๋“  ํ™•์žฅ ์˜์กด์„ฑ)

python3.12 -m venv .venv && source .venv/bin/activate
pip install --upgrade pip
pip install greeum[all]  # faiss + transformers + keybert + openai ์ง€์›

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

greeum-2.0.1.tar.gz (97.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

greeum-2.0.1-py3-none-any.whl (101.4 kB view details)

Uploaded Python 3

File details

Details for the file greeum-2.0.1.tar.gz.

File metadata

  • Download URL: greeum-2.0.1.tar.gz
  • Upload date:
  • Size: 97.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for greeum-2.0.1.tar.gz
Algorithm Hash digest
SHA256 896d9356bf53393e18f58c0e59a4032d503a3d5245c2e63e164c1b64c1187259
MD5 5a0683c9ca5757a6e39f2e53af0bc463
BLAKE2b-256 5fd31e36a21ec0625988f9bc1abd52036771e1c50befab9ccd9c1a021e324e30

See more details on using hashes here.

File details

Details for the file greeum-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: greeum-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 101.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for greeum-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c882ba54ab8c565383b4d98198eff8fc7ee03dbe4c97e2b294e886f9bd519c7b
MD5 59b07b757e3c0237a690429ea8852739
BLAKE2b-256 75babbc758f1249680035fff16a9298af8df4a5ca310d09bb1b9fcb1e7e023f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page