openvector_dev


Nameopenvector_dev JSON
Version 0.1.33 PyPI version JSON
download
home_pageNone
SummaryNone
upload_time2025-07-10 10:50:51
maintainerNone
docs_urlNone
authorp00ler
requires_python>=3.11
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Persona-Memory Subsystem

## Назначение:
Модуль памяти для диалогового ИИ-агента.

Short-term: последние сообщения (RAM, deque).

Long-term: Qdrant + архив (долговременные факты и истории).

## Архитектура:
ShortTermMemory — хранит последние сообщения.

QdrantAdapter — async-слой для поиска/хранения чанков в Qdrant.

MemoryManagerQdrant — бизнес-логика.

EmbeddingProviderSentenceTransformer / Gemini — эмбеддинги.

MemoryService (фасад) — единая точка для верхнего слоя.

Chunk / ChunkPayload — pydantic-модели для хранения.

## Пример рабочего цикла:
```
mem = MemoryService(short_term, memory_manager)
mem.add_short("user", user_msg)
emb = await embedder.get_embedding(user_msg)
long_memories = await mem.get_long(user_id, emb, k=3)
short_ctx = mem.get_short(10)
mem.add_short("gf", answer)
await mem.save_long(user_id, Chunk(
    chunk_id=uuid4(), user_id=user_id, chunk_type="type0",
    created_at=datetime.utcnow(), last_hit=datetime.utcnow(),
    hit_count=0, text=answer, persistent=False
))
```

## Установка и тесты:
```
poetry add ./vector-memory

docker run -d --name qdrant -p 6333:6333 -v qdrant_data:/qdrant/storage qdrant/qdrant
  
pytest
```

## Конфигурация:
```
QDRANT_HOST, QDRANT_PORT
QDRANT_COLLECTION
VECTOR_SIZE (совпадает с embedding-моделью)
GEMINI_API_KEY (Gemini Embedding-004)
```

## Перед релизом:
- Все тесты проходят (pytest)
- Размеры векторов и коллекции совпадают
- Архивирование/restore, merge, фильтры работают
- Нет deprecated-методов в adapter

## Roadmap:
- Redis-кеш для hit_count
- Курсорный scroll для больших архивов
- gRPC/gateway-адаптер

## Test-Coverage
```
Name                              Stmts   Miss  Cover
-----------------------------------------------------
src\bases\memory_manager_abc.py      20      1    95%
src\memory_manager_qdrant.py         54     11    80%
src\memory_manager_ram.py            95     32    66%
src\qdrant_adapter.py                46      8    83%
src\schemas\chunk.py                 31      1    97%
src\short_term.py                    26      1    96%
-----------------------------------------------------
TOTAL                               272     54    80%
```


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "openvector_dev",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": null,
    "author": "p00ler",
    "author_email": "liveitspain@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/a1/0a/2807e2a71d27c0f676677f278466756cf7d05fce6a92feb994254152a431/openvector_dev-0.1.33.tar.gz",
    "platform": null,
    "description": "# Persona-Memory Subsystem\n\n## \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:\n\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u0418\u0418-\u0430\u0433\u0435\u043d\u0442\u0430.\n\nShort-term: \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (RAM, deque).\n\nLong-term: Qdrant + \u0430\u0440\u0445\u0438\u0432 (\u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u043a\u0442\u044b \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438).\n\n## \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430:\nShortTermMemory \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\n\nQdrantAdapter \u2014 async-\u0441\u043b\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430/\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0447\u0430\u043d\u043a\u043e\u0432 \u0432 Qdrant.\n\nMemoryManagerQdrant \u2014 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430.\n\nEmbeddingProviderSentenceTransformer / Gemini \u2014 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438.\n\nMemoryService (\u0444\u0430\u0441\u0430\u0434) \u2014 \u0435\u0434\u0438\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u043b\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0441\u043b\u043e\u044f.\n\nChunk / ChunkPayload \u2014 pydantic-\u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.\n\n## \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430:\n```\nmem = MemoryService(short_term, memory_manager)\nmem.add_short(\"user\", user_msg)\nemb = await embedder.get_embedding(user_msg)\nlong_memories = await mem.get_long(user_id, emb, k=3)\nshort_ctx = mem.get_short(10)\nmem.add_short(\"gf\", answer)\nawait mem.save_long(user_id, Chunk(\n    chunk_id=uuid4(), user_id=user_id, chunk_type=\"type0\",\n    created_at=datetime.utcnow(), last_hit=datetime.utcnow(),\n    hit_count=0, text=answer, persistent=False\n))\n```\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0442\u0435\u0441\u0442\u044b:\n```\npoetry add ./vector-memory\n\ndocker run -d --name qdrant -p 6333:6333 -v qdrant_data:/qdrant/storage qdrant/qdrant\n  \npytest\n```\n\n## \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f:\n```\nQDRANT_HOST, QDRANT_PORT\nQDRANT_COLLECTION\nVECTOR_SIZE (\u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 embedding-\u043c\u043e\u0434\u0435\u043b\u044c\u044e)\nGEMINI_API_KEY (Gemini Embedding-004)\n```\n\n## \u041f\u0435\u0440\u0435\u0434 \u0440\u0435\u043b\u0438\u0437\u043e\u043c:\n- \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 (pytest)\n- \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442\n- \u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435/restore, merge, \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442\n- \u041d\u0435\u0442 deprecated-\u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 adapter\n\n## Roadmap:\n- Redis-\u043a\u0435\u0448 \u0434\u043b\u044f hit_count\n- \u041a\u0443\u0440\u0441\u043e\u0440\u043d\u044b\u0439 scroll \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0430\u0440\u0445\u0438\u0432\u043e\u0432\n- gRPC/gateway-\u0430\u0434\u0430\u043f\u0442\u0435\u0440\n\n## Test-Coverage\n```\nName                              Stmts   Miss  Cover\n-----------------------------------------------------\nsrc\\bases\\memory_manager_abc.py      20      1    95%\nsrc\\memory_manager_qdrant.py         54     11    80%\nsrc\\memory_manager_ram.py            95     32    66%\nsrc\\qdrant_adapter.py                46      8    83%\nsrc\\schemas\\chunk.py                 31      1    97%\nsrc\\short_term.py                    26      1    96%\n-----------------------------------------------------\nTOTAL                               272     54    80%\n```\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": null,
    "version": "0.1.33",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "116a7a57da3cabd6ee2dd91bcc11c3b2db6aa23ce34e59244586f243987a1186",
                "md5": "708d7dc4f0fb6905114766243ef5d615",
                "sha256": "4d249e8ca3c6e6dbda4812097541ec6dd6a1dfad44747bdb0f95bf58403b2501"
            },
            "downloads": -1,
            "filename": "openvector_dev-0.1.33-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "708d7dc4f0fb6905114766243ef5d615",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 16684,
            "upload_time": "2025-07-10T10:50:49",
            "upload_time_iso_8601": "2025-07-10T10:50:49.432050Z",
            "url": "https://files.pythonhosted.org/packages/11/6a/7a57da3cabd6ee2dd91bcc11c3b2db6aa23ce34e59244586f243987a1186/openvector_dev-0.1.33-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a10a2807e2a71d27c0f676677f278466756cf7d05fce6a92feb994254152a431",
                "md5": "2fff1c98dc5765a227b278010a356986",
                "sha256": "56a62eda307f934b7e25f6ad3abd761d36aa0c55bb6706889041b049ce946859"
            },
            "downloads": -1,
            "filename": "openvector_dev-0.1.33.tar.gz",
            "has_sig": false,
            "md5_digest": "2fff1c98dc5765a227b278010a356986",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 12398,
            "upload_time": "2025-07-10T10:50:51",
            "upload_time_iso_8601": "2025-07-10T10:50:51.017392Z",
            "url": "https://files.pythonhosted.org/packages/a1/0a/2807e2a71d27c0f676677f278466756cf7d05fce6a92feb994254152a431/openvector_dev-0.1.33.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-10 10:50:51",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "openvector_dev"
}
        
Elapsed time: 0.40699s