11import os
22from dotenv import load_dotenv
3- from fastapi import APIRouter , Depends , HTTPException , BackgroundTasks
3+ from fastapi import APIRouter , Depends , HTTPException , BackgroundTasks , Query
44from fastapi .responses import StreamingResponse
55from sqlalchemy .orm import Session
66from typing import List
@@ -145,20 +145,33 @@ def toggle_favorite(
145145 return note
146146
147147def save_summary (note_id : int , text : str ):
148+ """Deprecated: kept for reference. No longer overwrites original note."""
148149 db2 = SessionLocal ()
149150 try :
150151 tgt = db2 .query (Note ).filter (Note .id == note_id ).first ()
151- if tgt :
152- tgt .content = text
153- tgt .updated_at = datetime .utcnow ()
154- db2 .commit ()
152+ if not tgt :
153+ return
154+ # Create a new note in the same folder with title '<original>요약'
155+ title = (tgt .title or "" ).strip () + "요약"
156+ if len (title ) > 255 :
157+ title = title [:255 ]
158+ new_note = Note (
159+ user_id = tgt .user_id ,
160+ folder_id = tgt .folder_id ,
161+ title = title ,
162+ content = text ,
163+ )
164+ db2 .add (new_note )
165+ db2 .commit ()
155166 finally :
156167 db2 .close ()
157168
158169@router .post ("/notes/{note_id}/summarize" )
159170async def summarize_stream_langchain (
160171 note_id : int ,
161172 background_tasks : BackgroundTasks ,
173+ domain : str | None = Query (default = None , description = "meeting | code | paper | general | auto(None)" ),
174+ longdoc : bool = Query (default = True , description = "Enable long-document map→reduce" ),
162175 db : Session = Depends (get_db ),
163176 user = Depends (get_current_user )
164177):
@@ -168,15 +181,32 @@ async def summarize_stream_langchain(
168181
169182 async def event_gen ():
170183 parts = []
171- async for sse in stream_summary_with_langchain (note .content ):
184+ async for sse in stream_summary_with_langchain (note .content , domain = domain , longdoc = longdoc ):
172185 parts .append (sse .removeprefix ("data: " ).strip ())
173186 yield sse .encode ()
174187 full = "" .join (parts ).strip ()
175188 if full :
176- background_tasks .add_task (save_summary , note .id , full )
189+ # Create a new summary note in the same folder with title '<original>요약'
190+ title = (note .title or "" ).strip () + "요약"
191+ if len (title ) > 255 :
192+ title = title [:255 ]
193+ new_note = Note (
194+ user_id = user .u_id ,
195+ folder_id = note .folder_id ,
196+ title = title ,
197+ content = full ,
198+ )
199+ db .add (new_note )
200+ db .commit ()
201+ db .refresh (new_note )
202+ try :
203+ # Optional: notify created note id
204+ yield f"data: SUMMARY_NOTE_ID:{ new_note .id } \n \n " .encode ()
205+ except Exception :
206+ pass
177207
178208 return StreamingResponse (
179209 event_gen (),
180210 media_type = "text/event-stream" ,
181211 headers = {"Cache-Control" : "no-cache" }
182- )
212+ )
0 commit comments