# πŸ“¦ Components Reference > **Referencia detallada por paquete.** Cada paquete tiene su README en `pkg//README.md` β€” este documento es el overview de alto nivel y cΓ³mo se conectan entre sΓ­. ## πŸ“š Tabla de paquetes | Paquete | Responsabilidad | README | |---|---|---| | `pkg/agent` | Bucle iterativo, termination, approval hooks | [`pkg/agent/README.md`](../pkg/agent/README.md) | | `pkg/llm` | `LLMClient` interface, streaming, providers | [`pkg/llm/README.md`](../pkg/llm/README.md) | | `pkg/tools` | Tool registry, JSON Schema, sandbox | [`pkg/tools/README.md`](../pkg/tools/README.md) | | `pkg/persona` | Persona system, AGENTS.md discovery | [`pkg/persona/README.md`](../pkg/persona/README.md) | | `pkg/rag` | Memoria, embeddings, vector DB | [`pkg/rag/README.md`](../pkg/rag/README.md) | | `pkg/config` | YAML loading, precedencia | [`pkg/config/README.md`](../pkg/config/README.md) | ## πŸ—ΊοΈ CΓ³mo se conectan ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ pkg/agent β”‚ ← Orquesta todo β”‚ (Loop) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ pkg/llm β”‚ β”‚pkg/tools β”‚ β”‚pkg/personaβ”‚ β”‚ (LLM β”‚ β”‚ (Tools + β”‚ β”‚ (Persona)β”‚ β”‚ Client) β”‚ β”‚ Registry)β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ providers β”‚ sandbox β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ adapters β”‚ β”‚ os.Root β”‚ β”‚ (OpenAI, β”‚ β”‚ (kernel) β”‚ β”‚ Anthropicβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ Ollama...)β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ pkg/rag β”‚ β”‚pkg/configβ”‚ β”‚ examples β”‚ β”‚ (Memory)β”‚ β”‚ (YAML) β”‚ β”‚ (demo) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸ”„ Flujo tΓ­pico de uso ```go // 1. Cargar config cfg, _ := config.Load(ctx, workdir) // 2. Crear LLM client desde config llmClient, _ := llm.NewFromConfig(cfg.Provider) // 3. Cargar persona (descubre AGENTS.md automΓ‘ticamente) p, _ := persona.Discover(ctx, workdir) // 4. Crear tool registry y registrar tools del producto registry := tools.NewRegistry() // (producto registra sus tools especΓ­ficas aquΓ­) // 5. Crear memory (si el producto lo usa) memory, _ := rag.NewFromConfig(cfg.RAG) // 6. Crear agent loop loop := agent.New(agent.Config{ LLM: llmClient, Persona: p, Tools: registry, Memory: memory, Sandbox: tools.NewSandbox(workdir), }) // 7. Ejecutar resp, _ := loop.Run(ctx, "Refactoriza auth.go") ``` ## 🎯 DecisiΓ³n: ΒΏquΓ© paquete usar para quΓ©? | Necesito... | Usar... | |---|---| | Llamar a un LLM | `pkg/llm/` | | Permitir que el LLM invoque funciones | `pkg/tools/` | | Construir el system prompt | `pkg/persona/` | | Recordar contexto entre sesiones | `pkg/rag/` | | Configurar el comportamiento desde YAML | `pkg/config/` | | Ejecutar el bucle completo (LLM + tools + memoria) | `pkg/agent/` | | Validar paths de forma segura | `pkg/tools/sandbox/` | ## πŸ“ Ejemplos completos Ver [`examples/`](../../examples/) β€” ejemplos standalone que muestran casos de uso comunes. | Ejemplo | Demuestra | |---|---| | `examples/simple_chat/` | Chat bΓ‘sico sin tools | | `examples/chat_with_tools/` | Chat con tools custom | | `examples/rag_qa/` | Q&A sobre documentos | | `examples/multi_agent/` | OrquestaciΓ³n de sub-agents | | `examples/streaming_ui/` | IntegraciΓ³n con TUI | > πŸ“Œ Los ejemplos se crean cuando el cΓ³digo base estΓ‘ implementado. Por ahora cada `pkg/*/README.md` tiene un snippet mΓ­nimo de uso. ## πŸ”Œ Adapters incluidos ### LLM Providers (`pkg/llm/providers/`) | Provider | Import | Modelos | |---|---|---| | OpenAI | `providers/openai` | gpt-4o, gpt-4o-mini, gpt-4-turbo | | Anthropic | `providers/anthropic` | claude-sonnet-4.5, claude-haiku-4 | | Ollama | `providers/ollama` | llama3.1, qwen2.5, mistral | | llama.cpp | `providers/llamacpp` | Custom GGUF models | ### Vector DBs (`pkg/rag/backends/`) | Backend | Estado | Notas | |---|---|---| | ChromaDB embedded | βœ… Estable | Default, simple API | | Qdrant embedded | 🚧 En desarrollo | Para >100k docs | | SQLite + sqlite-vec | πŸ“‹ Planeado | Zero-deps | ### Embeddings (`pkg/rag/embeddings/`) | Provider | Modelos | |---|---| | Ollama | nomic-embed-text, bge-m3, mxbai-embed-large | | Local ONNX | all-MiniLM-L6-v2 (fallback) | ## πŸ› οΈ CΓ³mo aΓ±adir un componente nuevo **Ejemplo: aΓ±adir un nuevo LLM provider** ```bash mkdir -p pkg/llm/providers/myprovider touch pkg/llm/providers/myprovider/client.go touch pkg/llm/providers/myprovider/client_test.go ``` ```go // pkg/llm/providers/myprovider/client.go package myprovider import ( "context" "github.com/VictorVargas/go-llm-agent/pkg/llm" ) type Client struct { apiKey string model string } func New(cfg Config) (*Client, error) { return &Client{apiKey: cfg.APIKey, model: cfg.Model}, nil } func (c *Client) Generate(ctx context.Context, req llm.CompletionRequest) (llm.CompletionResponse, error) { // implement against MyProvider API } func (c *Client) Stream(ctx context.Context, req llm.CompletionRequest) iter.Seq2[llm.StreamChunk, error] { // implement } func (c *Client) Name() string { return "myprovider" } func (c *Client) Capabilities() llm.ProviderCapabilities { /* ... */ } ``` Reglas: - βœ… Implementar `LLMClient` interface completa - βœ… Tests con `httptest.NewServer` para mockear la API - βœ… Documentar en `pkg/llm/providers/myprovider/README.md` (opcional pero recomendado) - βœ… Registrar en `llm.NewFromConfig()` para que sea elegible via YAML ## πŸ“– Documentos relacionados - [`architecture.md`](./architecture.md) β€” Arquitectura y core interfaces - [`phase2.md`](./phase2.md) β€” Features avanzadas (MCP, RAG completo, Skills, etc.) - [Productos que usan esta librerΓ­a](https://github.com/VictorVargas)