GitPrompt - это мощная Python библиотека для индексации Git репозиториев и работы с векторными эмбеддингами. Библиотека позволяет парсить Git проекты, генерировать эмбеддинги файлов и сохранять их в различных векторных базах данных.
- 🔍 Парсинг Git репозиториев: Поддержка папок, Git репозиториев и субмодулей
- 🧠 Генерация эмбеддингов: Интеграция с различными LLM провайдерами
- 💾 Векторные базы данных: Поддержка ChromaDB, Pinecone, Weaviate, Qdrant
- 🔄 Отслеживание изменений: Автоматическое обновление эмбеддингов при изменении файлов
- 🌿 Работа с ветками: Индексация определенных веток и сравнение между ветками
- 🚀 Удаленное развертывание: Централизованная индексация и синхронизация
- ⚡ Высокая производительность: Асинхронная обработка и батчевая генерация эмбеддингов
pip install gitpromptИз локальной папки (клонировали репозиторий и хотите поставить в новый venv):
# Создать и активировать новое окружение
python3 -m venv /path/to/my_venv
source /path/to/my_venv/bin/activate # Linux/macOS
# или: my_venv\Scripts\activate # Windows
# Установить пакет из корня репозитория
cd /path/to/gitprompt
pip install .Режим разработки (editable) — изменения в коде сразу видны без переустановки:
cd /path/to/gitprompt
pip install -e .Из репозитория по Git (без клонирования вручную):
pip install git+https://github.com/USERNAME/gitprompt.git
# или конкретная ветка/тег:
pip install git+https://github.com/USERNAME/gitprompt.git@mainС дополнительными зависимостями (только нужные бэкенды):
pip install .[chroma,openai]
# или: pip install -e ".[chroma,openai,sentence-transformers]"import asyncio
from gitprompt import GitIndexer, Config, VectorDBType, LLMProvider
async def main():
# Создание конфигурации
config = Config(
vector_db=VectorDBConfig(
type=VectorDBType.CHROMA,
collection_name="my_repo_embeddings"
),
llm=LLMConfig(
provider=LLMProvider.OPENAI,
api_key="your-openai-api-key",
model_name="text-embedding-ada-002"
)
)
# Создание индексера
indexer = GitIndexer(config)
# Индексация репозитория
result = await indexer.index_repository("/path/to/your/repository")
print(f"Проиндексировано {result['total_files']} файлов")
# Поиск в репозитории
results = await indexer.search_across_repositories(
"Как работает аутентификация?",
limit=5
)
for result in results:
print(f"Файл: {result['file_path']}")
print(f"Содержимое: {result['content'][:200]}...")
asyncio.run(main())async def multi_repo_example():
config = Config(
vector_db=VectorDBConfig(
type=VectorDBType.PINECONE,
api_key="your-pinecone-api-key",
collection_name="multi_repo_embeddings"
),
llm=LLMConfig(
provider=LLMProvider.SENTENCE_TRANSFORMERS,
model_name="all-MiniLM-L6-v2"
)
)
indexer = GitIndexer(config)
# Добавление нескольких репозиториев
repositories = [
"/path/to/frontend-repo",
"/path/to/backend-repo",
"/path/to/docs-repo"
]
for repo_path in repositories:
await indexer.index_repository(repo_path)
# Поиск по всем репозиториям
results = await indexer.search_across_repositories(
"конфигурация подключения к базе данных",
limit=10
)async def change_tracking_example():
config = Config(
vector_db=VectorDBConfig(type=VectorDBType.CHROMA),
llm=LLMConfig(
provider=LLMProvider.OPENAI,
api_key="your-openai-api-key"
),
deployment=DeploymentConfig(
enabled=True,
auto_deploy=True
)
)
indexer = GitIndexer(config)
repo = await indexer.add_repository("/path/to/your/repository")
# Запуск мониторинга изменений
await repo.start_change_tracking()VectorDBConfig(
type=VectorDBType.CHROMA,
collection_name="my_embeddings"
)VectorDBConfig(
type=VectorDBType.PINECONE,
api_key="your-pinecone-api-key",
collection_name="my_embeddings"
)VectorDBConfig(
type=VectorDBType.QDRANT,
host="localhost",
port=6333,
collection_name="my_embeddings"
)LLMConfig(
provider=LLMProvider.OPENAI,
api_key="your-openai-api-key",
model_name="text-embedding-ada-002",
batch_size=100
)LLMConfig(
provider=LLMProvider.SENTENCE_TRANSFORMERS,
model_name="all-MiniLM-L6-v2"
)LLMConfig(
provider=LLMProvider.COHERE,
api_key="your-cohere-api-key",
model_name="embed-english-v2.0"
)GitConfig(
branch="main", # Индексировать определенную ветку
include_patterns=[
"**/*.py",
"**/*.js",
"**/*.ts",
"**/*.md"
],
exclude_patterns=[
"**/node_modules/**",
"**/.git/**",
"**/__pycache__/**"
],
chunk_size=1000, # Размер чанка
chunk_overlap=200, # Перекрытие между чанками
track_submodules=True, # Отслеживать субмодули
track_remote=False # Отслеживать удаленные изменения
)# Получение изменений между ветками
changes = await repo.parser.get_changes(
repo.path,
"main",
"feature-branch"
)
# Индексация только изменений
result = await repo.index_changes(changes)config = Config(
# ... другие настройки ...
deployment=DeploymentConfig(
enabled=True,
server_url="https://your-indexing-server.com",
api_key="your-server-api-key",
sync_interval=300, # 5 минут
auto_deploy=True
)
)
# Развертывание на удаленном сервере
deployment_manager = DeploymentManager(config.deployment, indexer)
await deployment_manager.initialize()
await deployment_manager.deploy_repository("/path/to/repo")config = Config(
# ... другие настройки ...
max_workers=8, # Количество воркеров
cache_dir="/tmp/gitprompt_cache", # Кэш директория
llm=LLMConfig(
batch_size=200, # Размер батча для эмбеддингов
max_tokens=8192
)
)Подробная документация доступна в директории docs/:
- 📘 Руководство пользователя - Развёрнутая документация с примерами (установка, конфигурация, сценарии, CLI)
- 📖 Полная документация - Основное руководство с примерами
- 🔧 API Reference - Полная документация API
- 📝 Примеры использования - Развернутые примеры для различных сценариев
- ⚙️ Конфигурация - Подробное руководство по настройке
- 🚀 Развертывание - Развертывание в различных средах
- 📋 Индекс документации - Навигация по всей документации
Смотрите папку examples/ для более подробных примеров:
basic_usage.py- Базовые примеры использованияadvanced_usage.py- Продвинутые возможности и оптимизация
Основной класс для работы с индексацией репозиториев.
add_repository(path: str) -> GitRepository- Добавить репозиторийindex_repository(path: str, branch: Optional[str] = None) -> Dict[str, Any]- Индексировать репозиторийsearch_across_repositories(query: str, limit: int = 10) -> List[Dict[str, Any]]- Поиск по всем репозиториямstart_monitoring() -> None- Запустить мониторинг измененийstop_monitoring() -> None- Остановить мониторинг
Класс для работы с отдельным репозиторием.
index_repository(branch: Optional[str] = None) -> Dict[str, Any]- Индексировать репозиторийindex_changes(changes: List[FileChange]) -> Dict[str, Any]- Индексировать измененияsearch_similar(query: str, limit: int = 10) -> List[Dict[str, Any]]- Поиск в репозиторииstart_change_tracking() -> None- Запустить отслеживание измененийstop_change_tracking() -> None- Остановить отслеживание
- Python 3.9+
- Git
- Один из поддерживаемых LLM провайдеров
- Одна из поддерживаемых векторных баз данных
MIT License
Мы приветствуем вклад в развитие проекта! Пожалуйста, создавайте issues и pull requests.
Если у вас есть вопросы или проблемы, создайте issue в репозитории или обратитесь к документации.