Skip to content

Latest commit

History

History
266 lines (216 loc) · 6.78 KB

File metadata and controls

266 lines (216 loc) · 6.78 KB

ModelSync Architecture

🏗️ Visão Geral da Arquitetura

O ModelSync foi projetado como um sistema de versionamento distribuído focado em projetos de IA, inspirado no Git mas otimizado para o ecossistema de machine learning.

📁 Estrutura do Projeto

modelsync/
├── __init__.py # Inicialização do pacote
├── config.py # Configurações globais
├── cli/ # Interface de linha de comando
│ └── main.py # CLI principal com Typer
├── core/ # Funcionalidades principais
│ ├── __init__.py
│ └── versioning.py # Sistema de versionamento
├── api/ # API REST
│ └── main.py # FastAPI application
├── metadata/ # Gerenciamento de metadados
│ ├── __init__.py
│ └── model_metadata.py # Metadados de modelos e datasets
└── utils/ # Utilitários
├── __init__.py
├── helpers.py # Funções auxiliares
└── logger.py # Sistema de logging

🔧 Componentes Principais

1. Sistema de Versionamento (core/versioning.py)

Classe Principal:ModelSyncRepo

Funcionalidades:

  • Inicialização de repositórios
  • Sistema de staging (área de preparação)
  • Criação de commits com hash SHA-256
  • Rastreamento de arquivos modificados
  • Histórico de commits
  • Estrutura de diretórios similar ao Git

Estrutura de Dados:

{
"tree": "hash_do_tree_object",
"parent": "hash_do_commit_pai",
"author": {
"name": "Nome do Autor",
"email": "email@exemplo.com",
"timestamp": "2024-01-01T12:00:00"
},
"committer": {
"name": "Nome do Committer",
"email": "email@exemplo.com", "timestamp": "2024-01-01T12:00:00"
},
"message": "Mensagem do commit",
"hash": "hash_sha256_do_commit"
}

2. Interface de Linha de Comando (cli/main.py)

Tecnologia: Typer

Comandos Implementados:

  • init - Inicializar repositório
  • add - Adicionar arquivos ao staging
  • commit - Criar commit
  • status - Mostrar status do repositório
  • log - Mostrar histórico de commits
  • diff - Mostrar diferenças
  • restore - Restaurar arquivo (placeholder)
  • reset - Remover do staging (placeholder)
  • branch - Gerenciar branches (placeholder)
  • checkout - Trocar branch (placeholder)
  • merge - Fazer merge (placeholder)
  • remote - Gerenciar repositórios remotos (placeholder)
  • push - Enviar para remoto (placeholder)
  • pull - Baixar do remoto (placeholder)
  • clone - Clonar repositório (placeholder)

3. API REST (api/main.py)

Tecnologia: FastAPI

Endpoints Implementados:

  • GET / - Informações da API
  • GET /health - Health check
  • POST /init - Inicializar repositório
  • GET /status - Status do repositório
  • POST /add - Adicionar arquivos
  • POST /commit - Criar commit
  • GET /log - Histórico de commits
  • GET /branches - Listar branches (placeholder)
  • GET /diff - Diferenças de arquivos
  • GET /config - Configuração (placeholder)

4. Sistema de Metadados (metadata/model_metadata.py)

Classes:

  • ModelMetadata - Metadados de modelos ML
  • DatasetMetadata - Metadados de datasets

Funcionalidades:

  • Criação de metadados para modelos e datasets
  • Armazenamento de métricas de performance
  • Rastreamento de hiperparâmetros
  • Informações de treinamento
  • Versionamento de metadados

5. Utilitários (utils/)

helpers.py:

  • Cálculo de hash SHA-256
  • Manipulação de arquivos
  • Formatação de dados
  • Operações de diretório

logger.py:

  • Sistema de logging configurável
  • Suporte a console e arquivo
  • Diferentes níveis de log

🗂️ Estrutura de Repositório

projeto/
├── .modelsync/ # Diretório do ModelSync
│ ├── config # Configuração do repositório
│ ├── HEAD # Referência para branch atual
│ ├── index # Área de staging
│ ├── objects/ # Objetos do repositório
│ │ └── [hash]/[hash] # Commits e trees
│ ├── refs/ # Referências
│ │ └── heads/ # Branches locais
│ ├── metadata/ # Metadados
│ │ ├── models/ # Metadados de modelos
│ │ └── datasets/ # Metadados de datasets
│ └── logs/ # Logs do sistema
│ └── history.log # Histórico de ações
└── [arquivos do projeto] # Arquivos versionados

🔄 Fluxo de Trabalho

1. Inicialização

modelsync init --name "Usuário" --email "user@example.com"

2. Adicionar Arquivos

modelsync add arquivo1.py arquivo2.json

3. Fazer Commit

modelsync commit -m "Mensagem do commit"

4. Verificar Status

modelsync status

5. Ver Histórico

modelsync log
modelsync log --oneline

🧪 Testes

Framework: pytest

Cobertura:

  • Inicialização de repositório
  • Adição de arquivos
  • Criação de commits
  • Verificação de status
  • Histórico de commits

Executar Testes:

python run_tests.py

🐳 Containerização

Dockerfile:

  • Base: Python 3.10-slim
  • Usuário não-root
  • Porta 8000 exposta
  • Otimizado para produção

Docker Compose:

  • Serviço de API
  • Serviço de CLI
  • Volumes persistentes

🚀 Deploy e Desenvolvimento

Desenvolvimento Local

# Setup inicial
python scripts/dev_setup.py
# Iniciar API
python scripts/start_api.py
# Usar CLI
python modelsync/cli/main.py --help

Docker

# Build da imagem
docker build -t modelsync .# Executar API
docker run -p 8000:8000 modelsync python modelsync/api/main.py
# Executar CLI
docker run -v $(pwd):/workspace modelsync python modelsync/cli/main.py init

🔮 Roadmap

Funcionalidades Pendentes

  • Sistema de branching completo
  • Merge de branches
  • Repositórios remotos
  • Push/Pull
  • Clone de repositórios
  • Sistema de tags
  • Interface web
  • Integração com MLflow
  • Suporte a DVC
  • Backup automático

Melhorias Planejadas

  • Otimização de performance
  • Compressão de objetos
  • Cache inteligente
  • Paralelização de operações
  • Interface gráfica
  • Plugins para IDEs
  • Integração com CI/CD

📊 Métricas e Monitoramento

  • Logs estruturados em JSON
  • Métricas de performance
  • Rastreamento de operações
  • Health checks da API
  • Monitoramento de uso de disco

🔒 Segurança

  • Validação de entrada
  • Sanitização de paths
  • Controle de acesso (futuro)
  • Criptografia de metadados (futuro)
  • Auditoria de operações