94 lines
No EOL
2.1 KiB
Markdown
94 lines
No EOL
2.1 KiB
Markdown
# pkg/llm
|
|
|
|
> 🌐 **Idioma:** [English](README.md) | [Español](README.es.md)
|
|
|
|
|
|
> Abstracción multi-provider para modelos de lenguaje.
|
|
|
|
## Responsabilidad
|
|
|
|
Definir una interfaz común (`LLMClient`) y adapters para los principales providers.
|
|
|
|
## API pública
|
|
|
|
```go
|
|
type LLMClient interface {
|
|
Generate(ctx context.Context, req CompletionRequest) (CompletionResponse, error)
|
|
Stream(ctx context.Context, req CompletionRequest) iter.Seq2[StreamChunk, error]
|
|
Name() string
|
|
Capabilities() ProviderCapabilities
|
|
}
|
|
|
|
type CompletionRequest struct {
|
|
Messages []Message
|
|
Tools []tools.Tool
|
|
ToolChoice ToolChoice
|
|
Model string
|
|
Temperature *float32
|
|
MaxTokens *int
|
|
}
|
|
|
|
type CompletionResponse struct {
|
|
Content string
|
|
ToolCalls []tools.Call
|
|
Usage TokenUsage
|
|
StopReason string
|
|
}
|
|
|
|
type ProviderCapabilities struct {
|
|
SupportsTools bool
|
|
SupportsVision bool
|
|
MaxContextWindow int
|
|
}
|
|
```
|
|
|
|
## Providers incluidos
|
|
|
|
| Provider | Paquete | Soporte tools |
|
|
|---|---|---|
|
|
| OpenAI | `providers/openai` | ✅ |
|
|
| Anthropic | `providers/anthropic` | ✅ |
|
|
| Ollama | `providers/ollama` | ✅ (modelos que lo soporten) |
|
|
| llama.cpp | `providers/llamacpp` | ✅ (con grammar) |
|
|
|
|
## Uso
|
|
|
|
```go
|
|
import "github.com/VictorVargas/rony-llm-agent/pkg/llm/providers/anthropic"
|
|
|
|
client, err := anthropic.New(anthropic.Config{
|
|
APIKey: os.Getenv("ANTHROPIC_API_KEY"),
|
|
Model: "claude-sonnet-4.5",
|
|
})
|
|
|
|
resp, err := client.Generate(ctx, llm.CompletionRequest{
|
|
Messages: []llm.Message{
|
|
{Role: llm.RoleUser, Content: "Hola"},
|
|
},
|
|
})
|
|
```
|
|
|
|
## Streaming
|
|
|
|
```go
|
|
for chunk, err := range client.Stream(ctx, req) {
|
|
if err != nil { return err }
|
|
fmt.Print(chunk.Delta)
|
|
}
|
|
```
|
|
|
|
## Mock para tests
|
|
|
|
```go
|
|
import "github.com/VictorVargas/rony-llm-agent/pkg/llm/mock"
|
|
|
|
mockClient := mock.New(mock.Responses{
|
|
{Match: "hola", Response: "¡Hola! ¿Cómo estás?"},
|
|
{Match: "*", Response: "default"},
|
|
})
|
|
```
|
|
|
|
## Ver también
|
|
|
|
- [pkg/agent](../agent/README.md) — Usa `LLMClient`
|
|
- [pkg/tools](../tools/README.md) — Las `Tool` definitions |