
    h,                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ  edd       d dlmZ d dlmZmZmZ d dlm	Z	 d d	lmZmZ d d
lmZ d dl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  d dl!m"Z"  e	       Z# e         ed e jH                  d      dd          ed e jH                  d               e	 e jH                  d            Z% ee&      Z' e        e'jQ                  d      d        Z)e'jQ                  ddg      d        Z*e'jQ                  ddg      d        Z+e'jQ                  dd g      d!        Z,e'jQ                  d"dg      d#        Z-e'jQ                  d$dg      d%        Z.e'jQ                  d&d g      d'        Z/e&d(k(  re'ja                  d)d*d+d,       yy)-    N)OpenAI)generate_rag_addendumu   📍 being here 1Tflush)load_dotenv)Flaskrequestjsonify)SessionLocalinit_db)build_messages_payload)SessionUserCase)Message)Documentrender_template)Topic)funcu"   🔑 OPENAI_API_KEY ends with: ...OPENAI_API_KEYu   🗄 DB user: DB_USER)api_key/c                      t        d      S )Nz
index.htmlr        /var/www/html/dynbot/app.pyindexr    *   s    <((r   z/init-sessionPOST)methodsc                  (   t               } t        j                         }|j                  dd      }|j                  dd      }|j                  dt	        t        j                                     }| j                  t              j                  |      j                         }|s0t        ||dd      }| j                  |       | j                          t        |||	      }| j                  |       | j                          | j                  |       t        |||j                   
      }| j                  |       | j                          | j                  |       |j                   ||j                   d}| j#                          t%        |      S )N	tenant_id   user_idsession_token)idzDefault Userzdefault@example.com)r(   r$   usernameemail)r$   r&   r'   )r$   r&   
session_id)r+   r'   case_id)r   r	   get_jsongetstruuiduuid4queryr   	filter_byfirstaddcommitChatSessionrefreshr   r(   closer
   )	dbdatar$   r&   r'   usernew_sessioncaseresponses	            r   init_sessionr@   .   sC   	BDa(Ihhy!$GHH_c$**,.?@M 88D>##w#/557Dw)nTij
t
		 #K
 FF;IIKJJ{ >>D
 FF4LIIKJJt "nn&77H HHJ8r   z/casesc                  v   t               } t        j                  j                  dd      }t        j                  |t        j                  j                  dd            }| j                  |       | j                          | j                  |       | j                          t        d|j                  i      dfS )Nr$   r%   title r$   rB   r,      )r   r	   jsonr.   modelsr   r5   r6   r8   r9   r
   r(   )r:   r$   news      r   create_caserI   ]   s    	B  a0I
++	1A1A'"1M+
NCFF3KbjjoHHJIsvv&',,r   z/cases/<int:case_id>/historyGETc           	         t               }|j                  t        j                        j	                  |       j                  t        j                  j                        j                         }|j                  t        j                        j                  t        j                        j                  t        j                  j                  | k(        j                         }|j                          t        |D cg c]4  }|j                  |j                  |j                  j!                         d6 c}|D cg c]  }|j"                  |j$                  d c}d      S c c}w c c}w )Nr,   )rolecontent	timestamp)
message_idquestion_text)messages	followups)r   r2   rG   r   r3   order_byrO   allFollowupQuestionjoinfilterr,   r9   r
   rM   rN   	isoformatrP   rQ   )r,   r:   msgsfupsmfs         r   get_historyr^   f   s    	B88FNN#--g->GGH`H`aeegD88F++,11&..AHHI_I_ahIhimmoDHHJfjkabQVVaiiAKKDYDYD[\k[_`VWALLQ`  k`s   <9E$; E)
z/cases/<int:case_id>/messagesc                    t               }t        j                         }|j                  d      }|j                  dd      }|j                  dd      }|r|s|j	                          t        ddi      dfS t        | d	||
      }|j                  |       |j                          |j                  |       t        || |      }t        j                  j                  j                  d|ddddddddididgdddgd      }t        j                  |       |j                   d   }	|	j"                  dk(  r|	j$                  j&                  d   }
t)        j*                  |
j,                  j.                        }|j                  dg       }|	j$                  j0                  r|	j$                  j0                  }nd}n|	j$                  j0                  }g }|ru|j3                  d      }|D cg c]  }t5        j6                  d|      s| }}|r<t9        d t;        |      D        d       }||d d  }|d | }dj=                  ||z         }t5        j>                  d!|      }tA        |      d kD  rtC        jD                  |d       }d}	 tG        ||d "      }|j                  d#      xs djI                         }|r	|d$| d%z  }t        | d&|'      }|j                  |       |j                          |j                  |       |jM                  t              jO                  | (      jQ                  t        jR                        jU                         }tA        |D cg c]  }|jV                  d	k(  s| c}      }|d k(  }|r|jM                  tX              jO                  |d)*      j[                         }t]        d+d,-       |jM                  tX              jO                  |d.*      jU                         }t]        d/d,-       |r|j0                  nd}t]        d0|d,-       |D ]  } t]        d1| j0                  d,-        d}!|r 	 tC        j^                  |      j0                  }!|D cg c]  }|jV                  d	k(  s|j0                    }"}|D cg c]  }|jV                  d	k(  s|j`                    }#}t]        d3|#d,-       tA        |#      dkD  r|#d   nd}$tA        |#      dkD  r|#d   nd}%tA        |#      d4kD  r|#d4   nd}&|jc                  |$|%|&5      }'t]        d6|$|%|&d,-       |' d7| d8|! }|r|d9z  }t]        d:d,-       t]        d;|d,-       |j	                          t        ||||d<      S c c}w # tJ        $ r}d}Y d }~d }~ww xY wc c}w # tJ        $ r}t]        d2|d,-       Y d }~Od }~ww xY wc c}w c c}w )=NrN   button_choicerC   r$   r%   errorz+Missing 'content' or 'tenant_id' in requesti  r<   )r,   rM   rN   r`   zgpt-4o-minifunctionextract_followupsuA   Suggest 2–4 follow-up questions based on the assistant's reply.object	questionsarraytypestring)rg   items)rg   
propertiesrequired)namedescription
parameters)rg   rb   auto)modelrR   toolstool_choicer   
tool_callsu\   Vielen Dank für Ihre Auswahl. Hier sind mögliche nächste Schritte oder Zusammenfassungen.
^\d+\.\sc              3   T   K   | ]   \  }}t        j                  d |      s| " yw)ru   N)rematch).0ilines      r   	<genexpr>zpost_message.<locals>.<genexpr>   s!     Rwq$bhh{D6QRs   ((   z\*\*(.*?)\*\*)r$   top_kaddendumuc   

---

<div class="rag-box">📘 <strong>Empfehlung aus den House of PM Best Practices</strong><br>z</div>	assistant)r,   rM   rN   rL   summary_intro_1rD   u   📄 Before quote call:Tr   quoteu   📄 After quote call:u   📄 Loaded quote entries:u   ↪️ Quote:u   ❌ Failed to select quote:zUser Messages:   )
iteration1
iteration2
iteration3zUser Choices:z

z

 z

---

u+   🔖 Final personalized summary constructedu   📍 Status of is_summary)replyrS   choices
is_summary)2r   r	   r-   r.   r9   r
   r   r5   r6   r8   r   openai_clientchatcompletionscreatepprintr   finish_reasonmessagers   rF   loadsrb   	argumentsrN   splitrw   rx   next	enumeraterW   findalllenrandomsampler   strip	Exceptionr2   r3   rT   rO   rU   rM   r   r4   printchoicer`   format)(r,   r:   r;   	user_textr`   r$   user_msgmessages_payloadrespr   	tool_callargsrS   ai_textlinesr{   numbered_linesfirst_numbered_index	truncatedprefixr   rag_addendumrag_reseai_msgpast_messagesr\   turnr   	intro_docquotes
intro_textq
quote_text	user_msgsbutton_choicesbutton_choice_1button_choice_2button_choice_3intro_filleds(                                           r   post_messager   q   s   	BD#IHH_b1Ma(II

!NOPRUUU wVYVcdHFF8IIKJJx .b'9E ))00! #/#f ('(/+18)=*' &1M	#
& - 1 D2 MM$\\!_F|+NN--a0	zz),,667HH["-	>>!!nn,,G uG ..((	 d# ,1P4BHH[$4O$PP#'R)E"2RTX$  $/*2A.	4 45))FY$67 jj)73G
7|a--+ L'	YaPJ/52<<> V n		
 W;HFFF6NIIKJJvHHW%///@II'J[J[\``bM==aAFFf,<=>D!)J HHX&009L]0^ddf	't4(#--	-QUUW&d3*3Y&&
 	*F$? 	:A/199D9	: 
D#]]62::
 )6J169IQYYJ	J3@UaAFFfDT!//UUd; 03>/BQ/F.+B/2>/BQ/F.+B/2>/BQ/F.+B!((&&& ) 
 	oX\] "N$wiuZLA G 	;4H	
%z>HHJ 	  ] Q.  6 >*  D3QdCCD KUs`   ,U8U8	1U= V3V
V -W W W+W=	VVV	V=$V88V=z/tenantsc                     t               } t        j                  d   }t        j	                  |      }| j                  |       | j                          | j                  |       | j                          t        d|j                  i      dfS )Nrl   )rl   r$   rE   )r   r	   rF   rG   Tenantr5   r6   r8   r9   r
   r(   )r:   rl   ts      r   create_tenantr   -  sf    	B<<D4 AFF1Iryy{BJJqMHHJK&',,r   z/topics/randomc                     t               } d}| j                  t              j                  |      j	                  t        j                               j                  d      j                         }g }|D ]F  }|j                  j                  d|j                        }|j                  |j                  |d       H | j                          t        |      S )Nr%   )r$   r}   z{topic})topicquestion)r   r2   r   r3   rT   r   r   limitrU   r   replacer   appendr9   r
   )r:   r$   
raw_topicsresultsr   filled_questions         r   get_random_topicsr   7  s    	BI%	Y	'	$++-	 	q		  G **,,Y@WW'
 	 HHJ7r   __main__z0.0.0.0i  )z//var/www/html/decompression/certs/fullchain.pemz-/var/www/html/decompression/certs/privkey.pem)hostportssl_contextdebug)1osrw   r0   loggingrF   sysr   r   openair   rag_servicer   r   dotenvr   flaskr   r	   r
   r:   r   r   utils.prompt_managerr   rG   r   r7   r   r   r   r   r   r   sqlalchemy.sqlr   clientgetenvr   __name__approuter    r@   rI   r^   r   r   r   runr   r   r   <module>r      s   	 	    
    -  &  ) )  $ 7 5 5   !  	  *92995E+Frs+K*LM N yryy+,- .yryy)9:;Ho 	 3) ) ?VH-+ .+\ 8fX&- '- )E7; < *VH=x >xv :x(- )- eW- ., zGG
    r   