Files
ss-tools/specs/033-gradio-agent-chat/contracts/modules.md
2026-06-09 09:43:34 +03:00

2.6 KiB

#region AgentChat.Contracts [C:4] [TYPE ADR] [SEMANTICS contracts,modules,agent-chat,final] @BRIEF Final module contracts — LangChain v1, PostgreSQL checkpointer, structured JSON metadata, dual-identity RBAC.

Backend

Contract C File Notes
AgentChat.GradioApp C4 backend/src/agent/app.py gr.ChatInterface(type="messages", multimodal=True, additional_inputs=[gr.Textbox("conversation_id")], examples=[["Покажи дашборды",null],["Статус системы",null]], concurrency_limit=1). Handler: def handler(message, history, request: gr.Request, conversation_id=None)
AgentChat.GradioApp.Handler C4 Creates create_react_agent() with PostgresSaver. astream_events(config={"configurable":{"thread_id":conversation_id}}). Resume: detects "confirm"/"deny" in additional_inputs, invokes Command(resume=...)
AgentChat.LangChain.Setup C4 backend/src/agent/langchain_setup.py create_agent(model, tools=ALL_TOOLS, middleware=[LoggingMiddleware(), HumanInTheLoopMiddleware(interrupt_on=DANGEROUS)], checkpointer=PostgresSaver(conn_string)). Wrapped in RunnableWithMessageHistory
AgentChat.Tools C4 backend/src/agent/tools.py Native @tool functions. Each: Pydantic BaseModel args_schema, calls FastAPI REST with dual-identity headers
AgentChat.Middleware C3 backend/src/agent/middleware.py LoggingMiddleware, risk config dict
AgentChat.Document.Parser C3 backend/src/agent/document_parser.py pdfplumber + openpyxl
AgentChat.Api.Conversations C3 backend/src/api/routes/agent_conversations.py CRUD + multi-tab gate
AgentChat.Api.ServiceToken C3 backend/src/api/routes/auth.py POST /api/auth/service-token
Models.Agent C2 backend/src/models/agent.py AgentConversation, AgentMessage
Schemas.Agent C1 backend/src/schemas/agent.py Pydantic

Frontend

Contract C File Notes
AgentChat.Model C4 AgentChatModel.svelte.ts submit() lifecycle, metadata parsing, resume logic. No tabRole, no follower
AgentChat.Panel C4 AssistantChatPanel.svelte Client.connect("/api/agent/gradio"), submit(), metadata-based rendering
AgentChat.Page C3 frontend/src/routes/agent/+page.svelte Two-column
AgentChat.ConversationList C3 ConversationList.svelte Search, infinite scroll, date grouping
AgentChat.ToolCallCard C2 ToolCallCard.svelte Props from metadata
AgentChat.ConfirmationCard C3 ConfirmationCard.svelte Calls second submit() with __resume__

#endregion AgentChat.Contracts