Полная документация API библиотеки GitPrompt.
Основной класс для управления индексацией и поиском по репозиториям.
class GitIndexer:
def __init__(self, config: Config)Параметры:
config(Config): Конфигурация библиотеки
Методы:
async def add_repository(self, path: str) -> GitRepositoryДобавляет репозиторий для индексации.
Параметры:
path(str): Путь к репозиторию
Возвращает:
GitRepository: Объект репозитория
Пример:
indexer = GitIndexer(config)
repo = await indexer.add_repository("/path/to/repo")async def index_repository(self, path: str, branch: Optional[str] = None) -> Dict[str, Any]Индексирует репозиторий.
Параметры:
path(str): Путь к репозиториюbranch(Optional[str]): Ветка для индексации (по умолчанию текущая)
Возвращает:
Dict[str, Any]: Результат индексации с ключами:total_files(int): Количество проиндексированных файловtotal_chunks(int): Количество созданных чанковtotal_embeddings(int): Количество созданных эмбеддингов
Пример:
result = await indexer.index_repository("/path/to/repo", "main")
print(f"Индексировано {result['total_files']} файлов")async def search_across_repositories(self, query: str, limit: int = 10) -> List[Dict[str, Any]]Ищет по всем добавленным репозиториям.
Параметры:
query(str): Поисковый запросlimit(int): Максимальное количество результатов
Возвращает:
List[Dict[str, Any]]: Список результатов поиска, отсортированный по релевантности
Пример:
results = await indexer.search_across_repositories("authentication", limit=5)
for result in results:
print(f"Файл: {result['file_path']}")
print(f"Содержимое: {result['content'][:100]}...")async def start_monitoring(self) -> NoneЗапускает мониторинг изменений для всех репозиториев.
Пример:
await indexer.start_monitoring()async def stop_monitoring(self) -> NoneОстанавливает мониторинг изменений.
Пример:
await indexer.stop_monitoring()def get_repository(self, path: str) -> Optional[GitRepository]Получает репозиторий по пути.
Параметры:
path(str): Путь к репозиторию
Возвращает:
Optional[GitRepository]: Объект репозитория или None
def list_repositories(self) -> List[str]Возвращает список путей к добавленным репозиториям.
Возвращает:
List[str]: Список путей к репозиториям
Представляет отдельный репозиторий с возможностями индексации и поиска.
class GitRepository:
def __init__(self, path: str, config: Config)Параметры:
path(str): Путь к репозиториюconfig(Config): Конфигурация
Свойства:
path(str): Абсолютный путь к репозиториюconfig(Config): Конфигурацияparser(GitParser): Парсер репозиторияembedding_service(EmbeddingService): Сервис эмбеддинговvector_db(VectorDatabase): Векторная база данныхchange_tracker(ChangeTracker): Отслеживатель изменений
Методы:
async def initialize(self) -> NoneИнициализирует репозиторий для работы.
async def index_repository(self, branch: Optional[str] = None) -> Dict[str, Any]Индексирует репозиторий.
Параметры:
branch(Optional[str]): Ветка для индексации
Возвращает:
Dict[str, Any]: Результат индексации
async def index_changes(self, changes: List[FileChange]) -> Dict[str, Any]Индексирует только измененные файлы.
Параметры:
changes(List[FileChange]): Список изменений
Возвращает:
Dict[str, Any]: Результат индексации с ключами:processed_files(int): Количество обработанных файловnew_chunks(int): Количество новых чанковupdated_chunks(int): Количество обновленных чанковdeleted_chunks(int): Количество удаленных чанков
async def search_similar(self, query: str, limit: int = 10) -> List[Dict[str, Any]]Ищет в репозитории.
Параметры:
query(str): Поисковый запросlimit(int): Максимальное количество результатов
Возвращает:
List[Dict[str, Any]]: Результаты поиска
async def start_change_tracking(self) -> NoneЗапускает отслеживание изменений.
async def stop_change_tracking(self) -> NoneОстанавливает отслеживание изменений.
async def get_file_embeddings(self, file_path: str) -> List[Embedding]Получает все эмбеддинги для файла.
Параметры:
file_path(str): Путь к файлу
Возвращает:
List[Embedding]: Список эмбеддингов
Основной класс конфигурации.
class Config(BaseModel):
vector_db: VectorDBConfig
llm: LLMConfig
git: GitConfig = Field(default_factory=GitConfig)
deployment: DeploymentConfig = Field(default_factory=DeploymentConfig)
cache_dir: str = ".gitprompt_cache"
log_level: str = "INFO"
max_workers: int = 4Свойства:
vector_db(VectorDBConfig): Конфигурация векторной БДllm(LLMConfig): Конфигурация LLM провайдераgit(GitConfig): Конфигурация Gitdeployment(DeploymentConfig): Конфигурация развертыванияcache_dir(str): Директория для кэшаlog_level(str): Уровень логированияmax_workers(int): Максимальное количество воркеров
Методы:
@classmethod
def from_file(cls, file_path: str) -> ConfigЗагружает конфигурацию из файла.
Параметры:
file_path(str): Путь к файлу конфигурации
Возвращает:
Config: Объект конфигурации
def to_file(self, file_path: str) -> NoneСохраняет конфигурацию в файл.
Параметры:
file_path(str): Путь к файлу
Конфигурация векторной базы данных.
class VectorDBConfig(BaseModel):
type: VectorDBType
host: Optional[str] = None
port: Optional[int] = None
api_key: Optional[str] = None
collection_name: str = "gitprompt_embeddings"
dimension: Optional[int] = None
additional_params: Dict[str, Any] = Field(default_factory=dict)Свойства:
type(VectorDBType): Тип векторной БДhost(Optional[str]): Хост сервераport(Optional[int]): Порт сервераapi_key(Optional[str]): API ключcollection_name(str): Имя коллекцииdimension(Optional[int]): Размерность векторовadditional_params(Dict[str, Any]): Дополнительные параметры
Конфигурация LLM провайдера.
class LLMConfig(BaseModel):
provider: LLMProvider
api_key: Optional[str] = None
model_name: str = "text-embedding-ada-002"
batch_size: int = 100
max_tokens: int = 8192
additional_params: Dict[str, Any] = Field(default_factory=dict)Свойства:
provider(LLMProvider): Провайдер LLMapi_key(Optional[str]): API ключmodel_name(str): Название моделиbatch_size(int): Размер батчаmax_tokens(int): Максимальное количество токеновadditional_params(Dict[str, Any]): Дополнительные параметры
Конфигурация Git.
class GitConfig(BaseModel):
branch: Optional[str] = None
include_patterns: List[str] = Field(default_factory=lambda: ["**/*.py", "**/*.js", "**/*.ts", "**/*.md"])
exclude_patterns: List[str] = Field(default_factory=lambda: ["**/node_modules/**", "**/.git/**", "**/__pycache__/**"])
chunk_size: int = 1000
chunk_overlap: int = 200
track_submodules: bool = True
track_remote: bool = FalseСвойства:
branch(Optional[str]): Ветка для индексацииinclude_patterns(List[str]): Паттерны включаемых файловexclude_patterns(List[str]): Паттерны исключаемых файловchunk_size(int): Размер чанкаchunk_overlap(int): Перекрытие чанковtrack_submodules(bool): Отслеживать субмодулиtrack_remote(bool): Отслеживать удаленные изменения
Конфигурация развертывания.
class DeploymentConfig(BaseModel):
enabled: bool = False
server_url: Optional[str] = None
api_key: Optional[str] = None
sync_interval: int = 300
auto_deploy: bool = FalseСвойства:
enabled(bool): Включено ли развертываниеserver_url(Optional[str]): URL сервераapi_key(Optional[str]): API ключ сервераsync_interval(int): Интервал синхронизации в секундахauto_deploy(bool): Автоматическое развертывание
Представляет фрагмент файла.
@dataclass
class FileChunk:
file_path: str
content: str
start_line: int
end_line: int
chunk_id: str
metadata: Dict[str, Any]Свойства:
file_path(str): Путь к файлуcontent(str): Содержимое чанкаstart_line(int): Начальная строкаend_line(int): Конечная строкаchunk_id(str): Уникальный ID чанкаmetadata(Dict[str, Any]): Метаданные
Представляет изменение в файле.
@dataclass
class FileChange:
file_path: str
change_type: ChangeType
old_path: Optional[str] = None
diff: Optional[str] = None
chunks: List[FileChunk] = NoneСвойства:
file_path(str): Путь к файлуchange_type(ChangeType): Тип измененияold_path(Optional[str]): Старый путь (для переименований)diff(Optional[str]): Diff измененияchunks(List[FileChunk]): Чанки файла
Представляет эмбеддинг с метаданными.
@dataclass
class Embedding:
vector: List[float]
chunk_id: str
file_path: str
content: str
metadata: Dict[str, Any]Свойства:
vector(List[float]): Векторное представлениеchunk_id(str): ID чанкаfile_path(str): Путь к файлуcontent(str): Содержимоеmetadata(Dict[str, Any]): Метаданные
Типы изменений файлов.
class ChangeType(str, Enum):
ADDED = "added"
MODIFIED = "modified"
DELETED = "deleted"
RENAMED = "renamed"Базовое исключение библиотеки.
class GitPromptError(Exception):
passОшибка конфигурации.
class ConfigurationError(GitPromptError):
passОшибка векторной базы данных.
class VectorDatabaseError(GitPromptError):
passОшибка генерации эмбеддингов.
class EmbeddingError(GitPromptError):
passОшибка парсинга Git репозитория.
class GitParserError(GitPromptError):
passОшибка развертывания.
class DeploymentError(GitPromptError):
passОшибка аутентификации.
class AuthenticationError(GitPromptError):
passСетевая ошибка.
class NetworkError(GitPromptError):
passФайл не найден.
class FileNotFoundError(GitPromptError):
passНеверный репозиторий.
class InvalidRepositoryError(GitPromptError):
passНеподдерживаемый провайдер.
class UnsupportedProviderError(GitPromptError):
passПревышен лимит запросов.
class RateLimitError(GitPromptError):
passНедостаточно прав.
class InsufficientPermissionsError(GitPromptError):
passdef calculate_file_hash(file_path: str) -> strВычисляет MD5 хеш файла.
Параметры:
file_path(str): Путь к файлу
Возвращает:
str: MD5 хеш
def matches_pattern(file_path: str, pattern: str) -> boolПроверяет соответствие пути паттерну.
Параметры:
file_path(str): Путь к файлуpattern(str): Паттерн
Возвращает:
bool: Соответствует ли путь паттерну
def should_include_file(file_path: str, include_patterns: List[str], exclude_patterns: List[str]) -> boolПроверяет, должен ли файл быть включен в индексацию.
Параметры:
file_path(str): Путь к файлуinclude_patterns(List[str]): Паттерны включенияexclude_patterns(List[str]): Паттерны исключения
Возвращает:
bool: Должен ли файл быть включен
def get_file_extension(file_path: str) -> strПолучает расширение файла.
Параметры:
file_path(str): Путь к файлу
Возвращает:
str: Расширение файла
def is_text_file(file_path: str) -> boolПроверяет, является ли файл текстовым.
Параметры:
file_path(str): Путь к файлу
Возвращает:
bool: Является ли файл текстовым
def chunk_text(text: str, chunk_size: int, chunk_overlap: int) -> List[Dict[str, Any]]Разбивает текст на чанки.
Параметры:
text(str): Текст для разбивкиchunk_size(int): Размер чанкаchunk_overlap(int): Перекрытие чанков
Возвращает:
List[Dict[str, Any]]: Список чанков
def format_file_size(size_bytes: int) -> strФорматирует размер файла в читаемый вид.
Параметры:
size_bytes(int): Размер в байтах
Возвращает:
str: Отформатированный размер
def get_repository_info(repo_path: str) -> Dict[str, Any]Получает информацию о репозитории.
Параметры:
repo_path(str): Путь к репозиторию
Возвращает:
Dict[str, Any]: Информация о репозитории
def clean_path(path: str) -> strОчищает и нормализует путь.
Параметры:
path(str): Путь
Возвращает:
str: Очищенный путь
def get_relative_path(file_path: str, base_path: str) -> strПолучает относительный путь.
Параметры:
file_path(str): Путь к файлуbase_path(str): Базовый путь
Возвращает:
str: Относительный путь
def is_binary_file(file_path: str) -> boolПроверяет, является ли файл бинарным.
Параметры:
file_path(str): Путь к файлу
Возвращает:
bool: Является ли файл бинарным
def get_file_language(file_path: str) -> Optional[str]Определяет язык программирования по расширению файла.
Параметры:
file_path(str): Путь к файлу
Возвращает:
Optional[str]: Язык программирования или None
Этот API Reference покрывает все основные классы, методы и функции библиотеки GitPrompt. Для получения дополнительной информации обращайтесь к исходному коду или создавайте issues в репозитории проекта.