2.6 KiB
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