chore: auto-commit (286 archivos)
- .claude/agents/fn-orquestador/SKILL.md - .claude/commands/fn_claude.md - .claude/rules/INDEX.md - .claude/rules/cpp_apps.md - .claude/rules/ids_naming.md - CHANGELOG.md - apps/dag_engine/README.md - apps/dag_engine/api.go - apps/dag_engine/dags_migrated/example.yaml - apps/dag_engine/dags_migrated/example_lineage_tracking.yaml - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
---
|
||||
name: claude_cli_prompt
|
||||
kind: function
|
||||
lang: py
|
||||
domain: infra
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def claude_cli_prompt(prompt: str, timeout_s: int = 60, model: str | None = None, max_chars_response: int = 200_000, extra_args: list[str] | None = None) -> str"
|
||||
description: "Invoca `claude -p` via subprocess y devuelve la respuesta completa como string. Valida presencia del CLI, captura stderr en errores, y trunca respuestas largas."
|
||||
tags: [claude, llm, cli, ai, navegator, subprocess]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: [shutil, subprocess]
|
||||
params:
|
||||
- name: prompt
|
||||
desc: "Texto del prompt a enviar a Claude."
|
||||
- name: timeout_s
|
||||
desc: "Segundos antes de raise TimeoutExpired. Default 60."
|
||||
- name: model
|
||||
desc: "Modelo a usar (ej. claude-opus-4-5). None usa el default del CLI."
|
||||
- name: max_chars_response
|
||||
desc: "Trunca stdout a este numero de caracteres. Default 200_000."
|
||||
- name: extra_args
|
||||
desc: "Lista de argumentos adicionales para el CLI."
|
||||
output: "Respuesta de Claude como texto plano (stdout del proceso)."
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
file_path: "python/functions/infra/claude_cli_prompt.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
from infra.claude_cli_prompt import claude_cli_prompt
|
||||
|
||||
# Pregunta simple
|
||||
respuesta = claude_cli_prompt("Suma 2+2 y devuelve solo el numero")
|
||||
print(respuesta) # "4"
|
||||
|
||||
# Con modelo especifico y timeout extendido
|
||||
respuesta = claude_cli_prompt(
|
||||
prompt="Resume este texto en 3 puntos: ...",
|
||||
model="claude-opus-4-5",
|
||||
timeout_s=120,
|
||||
)
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Cuando necesitas invocar Claude desde un script Python sin mantener sesion de chat — un prompt puntual (clasificacion, resumen, extraccion) que se resuelve en una sola llamada. Ideal para pipelines que procesan chunks de AX tree, texto, o cualquier contenido que requiera razonamiento LLM.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- Requiere `claude` CLI instalado y autenticado en PATH. Si no esta: `FileNotFoundError`.
|
||||
- Cada llamada lanza un subproceso nuevo — no hay cache ni sesion persistente.
|
||||
- El CLI puede tardar varios segundos al cold-start. Usa `timeout_s` conservador (>=30s).
|
||||
- `extra_args` se pasan literalmente — validar antes de pasar input de usuario.
|
||||
- En CI/CD sin display interactivo puede requerir `--no-interactive` en `extra_args`.
|
||||
Reference in New Issue
Block a user