
    8iY
              
       &   d Z ddlmZ ddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ  eddg      Z G d de
      Zej1                  dee   d       eddd       eddd      fdedededefd       Zy) u  
語意搜尋 API(階段 4d)。

單一頻道大量訊息累積後,要找「上次討論 Q4 預算的結論」靠關鍵字搜尋會撞到很多無關閒聊。
這支 API 用 Qdrant 向量搜尋(階段 3f 已建好)做語意比對 → 即使你打「Q4 預算」也能找到
「下季要花多少錢」這種講同一件事但用詞不同的訊息。

  - GET /api/search/messages?q=...&limit=10
    )datetime)UUID)	APIRouterHTTPExceptionQuerystatus)	BaseModel)select)selectinload)CurrentUser	DBSession)Message)search_relevantz/api/searchsearch)prefixtagsc                   d    e Zd ZU eed<   eed<   eed<   edz  ed<   eed<   g Zee   ed<   e	ed<   y)	SearchResultItem
message_id
channel_idcontentNsender_name
created_atr   score)
__name__
__module____qualname__r   __annotations__strr   r   listfloat     2/volume1/homes/robertsu/coba/app/app/api/search.pyr   r      s6    LtD$s)Lr#   r   z	/messagesu   跨歷史訊息語意搜尋)response_modelsummary.     )
min_length
max_length
   2   )defaultgelecurrent_userdbqlimitc                   K   t        ||d       d{   }|sg S |D cg c]"  }|j                  d      st        |d         $ }}|sg S t        t              j                  t        t        j                              j                  t        j                  j                  |      t        j                  j                  d            }t        |j                  |       d{   j                         j!                               }|D 	ci c]  }	t#        |	j                        |	 }
}	g }|D ]  }|
j                  |d         }	|	|j%                  |	j                  |	j&                  |	j(                  dd |	j                  r|	j                  j*                  nd|	j,                  |	j.                  xs g |j                  dd      d        |S 7 c c}w 7 c c}	w w)u   用 Qdrant 找跟 q 語意最相關的訊息。

    回傳每筆會帶完整 message 資訊(內容、發送者、時間)。
    N)queryr3   r   r   r(   r   g        )r   r   r   r   r   r   r   )r   getr   r
   r   optionsr   userwhereidin_
deleted_atis_r    executescalarsallr   appendr   r   display_namer   r   )r0   r1   r2   r3   rawridsstmtmsgsm	msg_by_idouts               r$   search_messagesrK   %   s       auF
FC	 +.
E#Q|1D4, #C
E	w	gll+	,	wzz~~c"G$6$6$:$:4$@	A 	
 rzz$''0026689D'+,t!QTTAtI, CMM!L/*9

$$,,yy#23&&166..d,,FFLbUU7C(
 		  J? G
 F (,sE   G#GG#GGBG#&G'(G#G,B)G#G#G#N)__doc__r   uuidr   fastapir   r   r   r   pydanticr	   
sqlalchemyr
   sqlalchemy.ormr   app.core.depsr   r   app.models.channelr   app.services.coba_memoryr   routerr   r6   r    r   intrK   r"   r#   r$   <module>rW      s      ; ;   ' 0 & 4 
-xj	9y  ())   315raB/	*** * 	*
*r#   