优化agent
This commit is contained in:
+12
-16
@@ -3,7 +3,7 @@ from __future__ import annotations
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from fastapi import FastAPI, File, Form, HTTPException, UploadFile
|
||||
from fastapi import FastAPI, File, HTTPException, UploadFile
|
||||
from fastapi.responses import JSONResponse, StreamingResponse
|
||||
|
||||
from app.models.contracts import ChatRequest, ConversationPatch, ModifyRequest, ParameterUpdate
|
||||
@@ -88,29 +88,32 @@ async def create_conversation() -> JSONResponse:
|
||||
@app.patch("/v1/conversations/{conversation_id}")
|
||||
async def patch_conversation(conversation_id: str, payload: ConversationPatch) -> JSONResponse:
|
||||
try:
|
||||
record = store.ensure_conversation(safe_conversation_id(conversation_id), payload.current_task_id, payload.attachments)
|
||||
record = store.ensure_conversation(safe_conversation_id(conversation_id), payload.current_task_id)
|
||||
except ValueError as error:
|
||||
raise HTTPException(status_code=400, detail=str(error)) from error
|
||||
return JSONResponse(record)
|
||||
|
||||
|
||||
@app.post("/v1/uploads")
|
||||
async def upload_attachment(
|
||||
@app.post("/v1/conversations/{conversation_id}/attachments")
|
||||
async def upload_conversation_attachment(
|
||||
conversation_id: str,
|
||||
file: UploadFile = File(...),
|
||||
task_id: str | None = Form(default=None),
|
||||
) -> JSONResponse:
|
||||
data = await file.read()
|
||||
filename = file.filename or "attachment"
|
||||
try:
|
||||
conversation = safe_conversation_id(conversation_id)
|
||||
if store.read_conversation(conversation) is None:
|
||||
raise HTTPException(status_code=404, detail="Conversation not found")
|
||||
kind = classify_upload(filename, file.content_type or "", len(data))
|
||||
task = store.ensure_task(safe_task_id(task_id) if task_id else None, f"Attachment: {filename}")
|
||||
relative_path, _ = store.write_upload(task["task_id"], filename, data)
|
||||
relative_path, _ = store.write_conversation_upload(conversation, filename, data)
|
||||
extracted_path = ""
|
||||
if kind == "document":
|
||||
extracted_path = relative_path + ".txt"
|
||||
extracted = extract_document_text(data)
|
||||
store.artifact_path(task["task_id"], extracted_path).write_text(extracted, encoding="utf-8")
|
||||
record = attachment_record(task["task_id"], filename, file.content_type or "", relative_path, data, kind, extracted_path)
|
||||
store.conversation_attachment_path(conversation, extracted_path).write_text(extracted, encoding="utf-8")
|
||||
record = attachment_record(conversation, filename, file.content_type or "", relative_path, data, kind, extracted_path)
|
||||
store.add_conversation_attachment(conversation, record)
|
||||
return JSONResponse(record)
|
||||
except ValueError as error:
|
||||
raise HTTPException(status_code=400, detail=str(error)) from error
|
||||
@@ -189,10 +192,6 @@ async def update_parameters(task_id: str, payload: ParameterUpdate) -> JSONRespo
|
||||
safe_id = safe_task_id(task_id)
|
||||
task = store.read_task(safe_id)
|
||||
current_revision_id = str((task or {}).get("current_revision") or "")
|
||||
current_revision = next(
|
||||
(item for item in (task or {}).get("revisions", []) if item.get("revision_id") == current_revision_id),
|
||||
{},
|
||||
)
|
||||
current_path = store.current_cdsl_path(safe_id)
|
||||
if not task or not current_path or not current_revision_id:
|
||||
raise ValueError("Task has no successful CDSL revision")
|
||||
@@ -209,9 +208,6 @@ async def update_parameters(task_id: str, payload: ParameterUpdate) -> JSONRespo
|
||||
operation={"type": "parameter_update", "values": payload.values},
|
||||
part_skills=None,
|
||||
generation_assumptions=[],
|
||||
design_intent_id=str(current_revision.get("design_intent_id") or ""),
|
||||
design_intent_path=str(current_revision.get("design_intent_path") or ""),
|
||||
design_intent_status="accepted" if current_revision.get("design_intent_id") else "",
|
||||
)
|
||||
return JSONResponse(result)
|
||||
except ValueError as error:
|
||||
|
||||
Reference in New Issue
Block a user