F1-03 - LangChain Python Technical Implementation Plan
March 22, 2026 ยท View on GitHub
Objetivo
Convertir integrations/langchain-python/ desde scaffold de diseno a un paquete funcional, verificable y mantenible, consistente con la integracion LangChain JS ya implementada y con el SDK Python de Agent-DID ya disponible.
Este documento cierra el plan tecnico por:
- archivos a crear o modificar,
- decisiones de arquitectura,
- versiones objetivo de dependencias,
- criterios de aceptacion por bloque,
- orden de ejecucion recomendado.
Decisiones Base
1. Superficie de integracion objetivo
La referencia funcional existente es la integracion JS en:
integrations/langchain/src/agentDidLangChain.js
La variante Python debe mantener paridad conceptual, no copia literal de abstracciones internas.
2. Enfoque de arquitectura para Python
La implementacion Python se construira sobre cuatro piezas principales:
- snapshot de identidad
- composicion explicita de contexto/system prompt
- tools reutilizables
- factory de integracion
No se tomara como requisito de Fase 1 una capa tipo middleware si la API publica de LangChain Python no la necesita de forma estable. La prioridad es una integracion robusta sobre superficies publicas y estables.
3. Politica de seguridad por defecto
Por defecto la integracion Python debe exponer solo:
- identidad actual,
- resolucion DID,
- verificacion de firmas.
Las operaciones sensibles deben ser opt-in explicito:
sign_httpsign_payloadrotate_keys
La clave privada nunca debe entrar en:
- prompts,
- mensajes,
- contexto del modelo,
- salidas de tools,
- logs de error estructurados.
Versiones Objetivo Verificadas
Verificacion realizada el 2026-03-21.
LangChain JS
langchain: ultima version publicada verificada1.2.35@langchain/core: ultima version publicada verificada1.1.34
LangChain Python
langchain: ultima version publicada verificada1.2.13langchain-core: ultima version publicada verificada1.2.20
Decision
El MVP debe fijar compatibilidad objetivo explicita en la linea 1.2:
- JS:
langchain ^1.2.35,@langchain/core ^1.1.34 - Python:
langchain >=1.2.13,<1.3,langchain-core >=1.2.20,<1.3
No se recomienda dejar la compatibilidad como "ultima version disponible" sin documentarla.
Alcance del MVP
El MVP funcional de LangChain Python debe incluir:
- factory publica de integracion,
- snapshot de identidad Agent-DID,
- composicion de
system_promptcon contexto verificable, - tool para identidad actual,
- tool para resolucion DID,
- tool para verificacion de firmas,
- tests del paquete,
- ejemplo runnable,
- documentacion actualizada.
Queda fuera del MVP inicial:
- rotacion de claves desde tools,
- firma arbitraria de payload habilitada por defecto,
- CI dedicado del paquete en la misma iteracion de primer merge,
- dependencias a superficies no estables de LangChain Python.
Plan Tecnico por Archivos
A. Alinear referencia JS con la ultima patch estable
Archivo
integrations/langchain/package.json
Cambio
- actualizar versiones objetivo de
langchainy@langchain/core
Criterios de aceptacion
langchainapunta a^1.2.35@langchain/coreapunta a^1.1.34- las pruebas del paquete JS siguen verdes
- el README JS sigue describiendo correctamente la compatibilidad objetivo
B. Convertir metadata Python de scaffold a paquete instalable
Archivo
integrations/langchain-python/pyproject.toml
Cambio
- declarar dependencias del paquete
- declarar dependencias de desarrollo
- incorporar configuracion minima de calidad
- actualizar semantica de estado cuando el MVP este listo
Dependencias objetivo
agent-did-sdk >=0.1.0langchain >=1.2.13,<1.3langchain-core >=1.2.20,<1.3
Dev dependencies recomendadas
pytest>=8.0ruff>=0.4mypy>=1.10
Criterios de aceptacion
- el paquete se instala con
python -m pip install -e . - las dependencias resuelven sin conflicto
- el archivo deja de representar solo un scaffold vacio
- el estado del paquete refleja al menos un
mvpimplementado al cerrar Fase 1
C. Definir configuracion publica y defaults de exposicion
Archivo nuevo
integrations/langchain-python/src/agent_did_langchain/config.py
Responsabilidad
- definir configuracion publica del adaptador
- definir flags de exposicion y sus defaults
Defaults esperados
current_identity = Trueresolve_did = Trueverify_signatures = Truesign_http = Falsesign_payload = Falserotate_keys = Falsedocument_history = False
Criterios de aceptacion
- la configuracion valida tipos y estructura
- los defaults reflejan la postura de seguridad del proyecto
- las capacidades sensibles solo aparecen con opt-in explicito
D. Construir snapshot de identidad
Archivo nuevo
integrations/langchain-python/src/agent_did_langchain/snapshot.py
Responsabilidad
- derivar una vista estable y serializable de
runtime_identity
Campos minimos
didcontrollernamedescriptionversioncapabilitiesmember_ofauthentication_key_idcreatedupdated
Criterios de aceptacion
- el snapshot es deterministic
- no incluye secretos
- mantiene equivalencia conceptual con la integracion JS
E. Componer contexto y system prompt
Archivo nuevo
integrations/langchain-python/src/agent_did_langchain/context.py
Responsabilidad
- generar el bloque textual de identidad Agent-DID
- combinarlo con un
system_promptbase
Helpers esperados
build_agent_did_system_prompt(...)compose_system_prompt(...)
Criterios de aceptacion
- el prompt incluye DID, controller, capacidades y metodo de autenticacion activo
- el prompt incluye reglas claras de no inventar DID ni fabricar headers autenticados
- no aparece material secreto en el contexto generado
F. Implementar tools minimas del paquete
Archivo nuevo
integrations/langchain-python/src/agent_did_langchain/tools.py
Fase 1 - Tools obligatorias
get_current_identityresolve_didverify_signature
Fase 2 - Tool sensible opt-in
sign_http_request
Reglas de implementacion
- usar el SDK Python real como backend
- devolver errores estructurados en vez de excepciones crudas al agente
- no devolver secretos
- validar URL en firma HTTP
Criterios de aceptacion
- las tools minimas existen y son invocables
resolve_didusa el resolutor real del SDKverify_signatureresponde de forma estable ante inputs validos e invalidossign_http_requestsolo existe sisign_http = Truesign_http_requestrechaza esquemas nohttp/https
G. Ensamblar la integracion publica
Archivo nuevo
integrations/langchain-python/src/agent_did_langchain/integration.py
Responsabilidad
- ensamblar config, snapshot, contexto y tools
- exponer una API pequena y usable desde LangChain Python
Interfaz esperada del objeto de integracion
toolsidentity_snapshotget_current_identity()get_current_document()compose_system_prompt(base_prompt, additional_context=None)
Criterios de aceptacion
- el objeto es usable con
create_agent(...) - no depende de APIs privadas o inestables de LangChain Python
- replica la intencion funcional del paquete JS
H. Activar la factory publica del paquete
Archivo
integrations/langchain-python/src/agent_did_langchain/__init__.py
Cambio
- reemplazar el
NotImplementedError - exportar factory y tipos publicos
Criterios de aceptacion
create_agent_did_langchain_integration(...)existe y funciona- importar el paquete no falla
- la superficie publica queda explicitamente cerrada
I. Agregar pruebas del paquete
Archivos nuevos
integrations/langchain-python/tests/test_snapshot.pyintegrations/langchain-python/tests/test_context.pyintegrations/langchain-python/tests/test_tools.pyintegrations/langchain-python/tests/test_security.pyintegrations/langchain-python/tests/test_integration.py
Cobertura minima
test_snapshot.py
- snapshot contiene todos los campos esperados
- no contiene secretos
test_context.py
- system prompt contiene DID, controller y capacidades
- el contexto adicional se concatena correctamente
test_tools.py
get_current_identitydevuelve DID correctoresolve_diddevuelve documento resolubleverify_signaturevalida firmas reales- entradas malformadas devuelven error estructurado
test_security.py
sign_http_requestrechazafile://sign_http_requestrechaza otros esquemas no permitidos- ninguna tool devuelve material secreto
- las tools sensibles no existen cuando no estan habilitadas
test_integration.py
- la factory devuelve el objeto esperado
compose_system_prompt(...)funciona con prompt vacio y no vacio- el conjunto de tools se alinea con la configuracion de exposicion
J. Agregar ejemplo runnable
Archivo nuevo
integrations/langchain-python/examples/agent_did_langchain_example.py
Responsabilidad
- mostrar ensamblaje de
create_agent(...)con:- identity
- prompt compuesto
- tools
Criterios de aceptacion
- el ejemplo no hardcodea secretos
- el ejemplo ilustra el flujo minimo real
- el ejemplo es coherente con el quick start JS
K. Actualizar documentacion del paquete y del track
Archivos
integrations/langchain-python/README.mddocs/F1-03-LangChain-Python-Integration-Design.mddocs/F1-03-LangChain-Python-Implementation-Checklist.md
Cambios
- convertir README de scaffold a MVP implementado
- reflejar versiones objetivo
- marcar fases completadas en checklist
- mantener visible lo aun no implementado
Criterios de aceptacion
- la documentacion coincide con el estado real del paquete
- no describe al SDK Python como dependencia pendiente
- deja claro que es MVP y que queda para iteraciones posteriores
Orden de Ejecucion Recomendado
integrations/langchain/package.jsonintegrations/langchain-python/pyproject.tomlintegrations/langchain-python/src/agent_did_langchain/config.pyintegrations/langchain-python/src/agent_did_langchain/snapshot.pyintegrations/langchain-python/src/agent_did_langchain/context.pyintegrations/langchain-python/src/agent_did_langchain/tools.pyintegrations/langchain-python/src/agent_did_langchain/integration.pyintegrations/langchain-python/src/agent_did_langchain/__init__.pyintegrations/langchain-python/tests/test_snapshot.pyintegrations/langchain-python/tests/test_context.pyintegrations/langchain-python/tests/test_tools.pyintegrations/langchain-python/tests/test_security.pyintegrations/langchain-python/tests/test_integration.pyintegrations/langchain-python/examples/agent_did_langchain_example.pyintegrations/langchain-python/README.mddocs/F1-03-LangChain-Python-Integration-Design.mddocs/F1-03-LangChain-Python-Implementation-Checklist.md
Definicion de Done
La integracion LangChain Python se considerara suficientemente cerrada para el repo cuando:
- exista la factory publica funcional,
- el paquete exponga tools de identidad actual, resolucion y verificacion,
- la firma HTTP exista como opt-in seguro,
- haya ejemplo runnable,
- haya pruebas funcionales y de seguridad,
- la documentacion deje de hablar de scaffold puro,
- la compatibilidad objetivo con LangChain quede documentada y validada.
Recomendacion Final
La mejor ruta tecnica es implementar primero un MVP funcional de LangChain Python sobre superficies publicas estables de LangChain 1.2, sin intentar replicar literalmente el middleware JS si eso introduce acoplamiento innecesario.
La integracion JS debe seguir tratandose como referencia funcional, y la variante Python debe buscar equivalencia conceptual, seguridad por defecto y validacion automatizada antes de expandir nuevos frentes adicionales mas alla de los ya entregados para CrewAI, Semantic Kernel y Microsoft Agent Framework.