Files
ai-g3sb-backman2.0/backend/llm/__pycache__/openai_client.cpython-312.pyc
T

126 lines
17 KiB
Plaintext
Raw Normal View History

Ë
0Qài–9ãóô—dZddlmZddlZddlZddlZddlmZddlm Z m
Z
m Z m Z m
Z
ddlmZmZddlmZmZej(e«ZeGd„d ««ZGd
„d «ZGd „d
«Z d dd„Zy)u‘
OpenAI API 客户端�装(�步/异步)
�供与 :mod:`llm.deepseek_client` �形�的接�,便于在需�时切� LLM 路由。
é)Ú annotationsN)Ú dataclass)ÚAnyÚDictÚIteratorÚListÚOptional)Ú AsyncOpenAIÚOpenAI)ÚChatCompletionÚChatCompletionMessagecóš—eZdZUdZded<dZded<dZded<dZd ed
<d Zd ed
<dZ d ed<dZ
d ed<dZ d ed<dZ d ed<dZ
ded<y)Ú OpenAIConfigu4OpenAI API é…�置(支æŒ� OpenAI 兼容网关)。ÚstrÚapi_keyzhttps://api.openai.com/v1Úbase_urlz gpt-4o-miniÚ
model_nameg333333Ó?ÚfloatÚ temperatureiÚintÚ
max_tokensgÍÌÌÌÌÌì?Útop_pçÚfrequency_penaltyÚpresence_penaltygN@ÚtimeoutNzOptional[Dict[str, str]]Ú
extra_headers)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú__annotations__rrrrrrrrr©óúbackend\llm\openai_client.pyrrsg…á>à
ƒLØ/€HˆcÓ/Ø#€J�Ó#Ø€K�ÓØ€J�ÓØ€Eˆ5ÓØ"Ð�uÓ"Ø!Ð�eÓ!Ø€GˆUÓØ.2€MÐ+Ô2r$rcóΗeZdZdZdd„Zdd„Z dd„Z dd„Z d dd„Zdd„Z dd„Z
dd „Z dd
„Z d d œ dd
„Z
ddœ dd„Zy)Ú OpenAIClientuï
OpenAI API 客户端(�步)。
说明:本项目其他模�仅�求具备 ``chat`` / ``chat_with_json`` 方法;
这里�外�供若干便�方法,与 DeepSeekClient 对�,便于�用�一套 prompt。
cóÊ—||_t|j|j|j¬«|_t jd|j|j«y)N©rrru1[OK] OpenAIClientåˆ�始化: model=%s, base_url=%s) Úconfigr rrrÚclientÚloggerÚinfor©Úselfr*s r%Ú__init__zOpenAIClient.__init__0sK€ØˆŒ ÜØ—N‘NØ—_‘_Ø—N‘Nô
ˆŒ ô
� ‰ Ø ?Ø × Ñ Ø �O‰Oõ
r$c
ó—|jd|jj«}|jdd«}|jj||jd|jj«|jd|jj
«|jd|jj «|jd|jj«|jd|jj«dœ}|�||d<n||d<|jjr|jj|d < |jjjjdi|¤Ž}|jd
j}|j }|�6t"j%d |j&|j(|j*«|S#t,$r¬} t/| «}
d |
vr�d|
vr}d|
vryd|vru|j1dd«||d< |jjjjdi|¤Ž}|jd
jcYd} ~ S#t,$rYnwxYwt"j3d
| «‚d} ~ wwxYw)NrÚmax_completion_tokensrrrrr)ÚmodelÚmessagesrrrrrrruKOpenAI调用完æˆ�: prompt_tokens=%s, completion_tokens=%s, total_tokens=%súUnsupported parameteruOpenAI API调用失败: %sr#)Úgetr*rrrrrrrrr+ÚchatÚ completionsÚcreateÚchoicesÚmessageÚusager,ÚdebugÚ
prompt_tokensÚcompletion_tokensÚ total_tokensÚ ExceptionrÚpopÚerror) r/r4Úkwargsrr2ÚparamsÚresponser;r<ÚeÚmsgs r%r7zOpenAIClient.chat=s@€Ø—Z‘Z  ¨d¯k©k×.DÑ.DÓEˆ
Ø &§
¡
Ð+BÀDÓ IÐð—[‘[×+Ñ+Ø Ø!Ÿ:™: m°T·[±[×5LÑ5LÓMØ—Z‘Z ¨¯©×):Ñ):Ó;Ø!'§¡Ø# T§[¡[×%BÑ%Bó"ð!'§
¡
Ø" D§K¡K×$@Ñ$@ó!ð—z‘z )¨T¯[©[×-@Ñ-@ÓAñ "
ˆð" !Ð ,Ø.CˆFÐ*Ò +à#-ˆF�<Ñ à �;‰;× $Ò $Ø&*§k¡k×&?Ñ&?ˆF�?Ñ #ð Ø'J t§{¡{×'7Ñ'7×'CÑ'C×'JÑ'JÑ'TÈVÑ'TˆHØ×&Ñ& qÑ)×1Ñ1ˆGØ—N‘NˆEØÐ Ü— ‘ ØaØ×'Ñ'Ø×+Ñ+Ø×&Ñ&ô ð ˆNøÜò ä�a“&ˆCà'¨3Ñ.Ø  CÑ'Ø+¨sÑ2Ø+°6Ñ9à—
‘
˜<¨Ô.Ø2<�Ð.Ñ/ðØB˜tŸ{™{×/Ñ/×;Ñ;×BÑBÑLÀVÑL�HØ#×+Ñ+¨AÑ.×6Ñ6Õ6øÜ òÙðúô
�L‰LÐ5°qÔ 9Ø ûð% ús>ÅBGÇ J Ç 2JÈAI!ÉJ É! I-É*JÉ,I-É-JÊJ c +ójK—|jd|jj«}|jdd«}|jj||jd|jj«|jd|jj
«|jd|jj «|jd|jj«d|jd |jj«d
œ}|�||d<n||d<|jjr|jj|d < |jjjjdi|¤Ž}|D]G}|jsŒ|jd j}|sŒ,t!|d
d«sŒ:|j"–—ŒIy#t$$rß} t'| «}
d|
vr´d|
vr°d|
vr¬d|vr¨|j)dd«||d< |jjjjdi|¤Ž}|D]G}|jsŒ|jd j}|sŒ,t!|d
d«sŒ:|j"–—ŒIYd} ~ y#t$$rYnwxYwt*j-d| «‚d} ~ wwxYw­w)ucæµ�å¼�è�Šå¤©ï¼šæŒ‰ completion 增é‡�产出文本片段(与 chat å�Œå�‚,固定 stream=True)。rr2NrrrrTr)r3r4rrrrÚstreamrrrÚcontentr5u OpenAI APIæµ�å¼�调用失败: %sr#)r6r*rrrrrrrrr+r7r8r9r:ÚdeltaÚgetattrrKrArrBr,rC) r/r4rDrr2rErJÚchunkrLrGrHs r%Ú chat_streamzOpenAIClient.chat_streamzs`èø€ð —Z‘Z  ¨d¯k©k×.DÑ.DÓEˆ
Ø &§
¡
Ð+BÀDÓ IÐð—[‘[×+Ñ+Ø Ø!Ÿ:™: m°T·[±[×5LÑ5LÓMØ—Z‘Z ¨¯©×):Ñ):Ó;Ø!'§¡Ø# T§[¡[×%BÑ%Bó"ð!'§
¡
Ø" D§K¡K×$@Ñ$@ó!ðØ—z‘z )¨T¯[©[×-@Ñ-@ÓAñ
"
ˆð !Ð ,Ø.CˆFÐ*Ò +à#-ˆF�<Ñ à �;‰;× $Ò $Ø&*§k¡k×&?Ñ&?ˆF�?Ñ #ð Ø8�T—[‘[×%Ñ%×1Ñ1×8Ñ8ÑB¸6ÑBˆFÛ�Ø—}’}ØØŸ
™
 aÑ(×.Ñ.�ÚœW U¨I°tÕ<ØŸ-™-Ó'ñ  øô ò Ü�a“&ˆCà'¨3Ñ.Ø  CÑ'Ø+¨sÑ2Ø+°6Ñ9à—
‘
˜<¨Ô.Ø2<�Ð.Ñ/ð
Ø@˜TŸ[™[×-Ñ-×9Ñ9×@Ñ@ÑJÀ6ÑJ�FÛ!'˜Ø$Ÿ}š}Ø$Ø %§
¡
¨aÑ 0× 6Ñ 6˜Ú ¤W¨U°I¸tÕ%DØ"'§-¡-Ó/ð "(ô øÜ òÙðúä �L‰LÐ;¸QÔ ?Ø ûð- üsh‚EJ3Å AGÆ)
GÆ7GÇJ3Ç J0Ç2J+ÈAJÉ"
JÉ0JÊJ3Ê JÊJ+ÊJÊJ+Ê+J0Ê0J3c óü—|j|fi|¤Ž}|jxsdj«} d|vr:|jd«dz}|jd|«}|||j«}n=d|vr9|jd«dz}|jd|«}|||j«}t j
|«S#tj $r%}tjd|«d|dœcYd}~Sd}~wwxYw) NÚz```jsonéú```éu)JSONè§£æž�失败,返回原始内容: %sT)Ú_json_decode_failedÚ raw_content) r7rKÚstripÚfindÚjsonÚloadsÚJSONDecodeErrorr,Úwarning)r/r4rDr;rKÚstartÚendrGs r%Úchat_with_jsonzOpenAIClient.chat_with_json¹s÷€ð�$—)‘)˜HÑ/¨Ñ/ˆØ—?‘?Ò( b×/Ñ/Ó1ˆð IؘGÑ#ØŸ ™  YÓ/°!Ñ3�Ø—l‘l 5¨%Ó0�Ø! %¨Ð,×2Ñ2Ó4‘ؘ'Ñ!ØŸ ™  UÓ+¨aÑ/�Ø—l‘l 5¨%Ó0�Ø! %¨Ð,×2Ñ2Ó4�Ü—:‘:˜gÓ&Ð &øÜ×#Ñ#ò IÜ �N‰NÐFÈÔ JØ+/ÀÑHÕ Hûð Iús³BCÃC;ÃC6Ã0C;Ã6C;c óð—ddlm}m}d|dœd|j|||¬«dœg}|j dd«|j d d
«|j
|fi|¤Ž}|j xsd j«} d | vr;| jd «d
z}
| jd|
«} | |
| j«} | Sd| vr9| jd«dz}
| jd|
«} | |
| j«} | S)Nr)ÚSQL_GENERATOR_SYSTEMÚSQL_GENERATOR_USERÚsystem©ÚrolerKÚuser)ÚschemaÚquestionÚdialectrrrçð?rQz```sqlérSrT) Úconfig.promptsrarbÚformatÚ
setdefaultr7rKrWrX) r/ÚpromptrgrirDrarbr4rFrKr]r^s r%Ú generate_sqlzOpenAIClient.generate_sqlÎs€÷ LðÐ*>Ñ ?àØ-×4Ñ4Ø!¨F¸Gð5óñ
ð
ˆð ×ј-¨Ô-Ø×ј' 3Ô'Ø�4—9‘9˜XÑ0¨Ñ0ˆØ×#Ñ#Ò) r×0Ñ0Ó2ˆà �wÑ Ø—L‘L Ó*¨QÑ.ˆEØ—,‘,˜u eÓ,ˆCؘe CÐ(×.Ñ.Ó0ˆGð ˆð �gÑ
Ø—L‘L Ó'¨!Ñ+ˆEØ—,‘,˜u eÓ,ˆCؘe CÐ(×.Ñ.Ó0ˆGàˆr$c ó¶—ddlm}m}d|dœd|j||¬«dœg}|j dd«|j d d
«|j
|fi|¤ŽS) Nr)ÚVALIDATOR_SYSTEMÚVALIDATOR_USERrcrdrf)Úsqlrgrrrrj)rlrrrsrmrnr_)r/rtrgrDrrrsr4s r%Ú validate_sqlzOpenAIClient.validate_sqlísi€ßCðÐ*:Ñ ;ب×(=Ñ(=À#ÈfÐ(=Ó(UÑ Vð
ˆð
×ј-¨Ô-Ø×ј' 3Ô'Ø"ˆt×"Ñ" 8Ñ6¨vÑ6Ð6r$c ó¶—ddlm}m}d|dœd|j||¬«dœg}|j dd«|j d d
«|j
|fi|¤ŽS) Nr)ÚSCHEMA_LINKER_SYSTEMÚSCHEMA_LINKER_USERrcrdrf)rhÚ
table_listrrrrj)rlrwrxrmrnr_)r/rhryrDrwrxr4s r%Ú
select_tableszOpenAIClient.select_tablesùst€÷ LðÐ*>Ñ ?àØ-×4Ñ4Ø%°*ð5óñ
ð
ˆð ×ј-¨Ô-Ø×ј' 3Ô'Ø"ˆt×"Ñ" 8Ñ6¨vÑ6Ð6r$cóF—ddlm}m}|xsdj«}|syd|dœd|j |¬«dœg}|j |dd d
¬ «}|j xsdj«}|r!|j«dj«nd}|jd «S)
Nr)Ú#CANONICALIZE_NL_FOR_TEXT2SQL_SYSTEMÚ!CANONICALIZE_NL_FOR_TEXT2SQL_USERrQrcrdrf)rhrrjé)rrr2u「ã€�"'“â€�)rlr|r}rWrmr7rKÚ
splitlines) r/rhr|r}Úqr4rHÚtextÚlines r%Ú"normalize_nl_question_for_text2sqlz/OpenAIClient.normalize_nl_question_for_text2sql s§€÷
ð
Š^˜× "Ñ "Ó $ˆÙØàÐ*MÑ NØÐ(I×(PÑ(PÐZ[Ð(PÓ(\Ñ ]ð
ˆð�i‰i˜¨c¸ÐTWˆiÓXˆØ— ‘ Ò!˜r×(Ñ(Ó*ˆÙ/3ˆt�‰Ó  Ñ#×)Ñ)Ô+¸ˆØ�z‰zÐ+Ó,Ð,r$có$—|j|«S©N)rƒ)r/rhs r%Útranslate_nl_question_to_zhz(OpenAIClient.translate_nl_question_to_zhs€Ø×6Ñ6°xÓ@Ð@r$i@)Úmax_schema_charsc óÌ—ddlm}m}|xsdd|}d|dœd|j|xsd||¬«dœg} |j| fd d
d œ|¤Ž}
|
j
xsdj
«S) Nr)ÚEMPTY_RESULT_FEEDBACK_SYSTEMÚEMPTY_RESULT_FEEDBACK_USERrQrcrdrfõ(æ— ))rhrtrggš™™™™™Ù?r~)rr2)rlr‰rŠrmr7rKrW) r/rhrtrgr‡rDr‰rŠÚ schema_snipr4rHs r%Úempty_result_user_feedbackz'OpenAIClient.empty_result_user_feedback!sŠ€÷ \à’| Ð%6Ð&6Ð7ˆ àÐ*FÑ GàØ5×<Ñ<Ø%Ò0¨ØØ&ð=óñ
ð

ˆðˆd�i‰i˜ÐW¨cÈÑWÐPVÑWˆØ—‘Ò" ×)Ñ)Ó+Ð,r$i )Ú
max_sql_charsc ó¼—ddlm}m}|xsdj«xsd}|xsdj«}t |«|kDr|d|dz
j «dz}d|dœd |j
||¬
«dœg} |jd d «|jd
d«|jdd«|j| fi|¤Ž}
|
jxsdj«S)Nr)Ú!SQL_PROBE_SUCCESS_DELIVERY_SYSTEMÚSQL_PROBE_SUCCESS_DELIVERY_USERrQr‹éu
-- …(已截断)rcrdrf)rhrtrgš™™™™™É?rrjr2i@)
rlr�r‘rWÚlenÚrstriprmrnr7rK) r/rhrtrŽrDr�r‘r€Úsr4rHs r%Ú"sql_probe_success_delivery_messagez/OpenAIClient.sql_probe_success_delivery_message;sí€÷
ð
Š^˜× "Ñ "Ó $Ò /¨ˆØ
ŠY�B× Ñ Ó ˆÜ ˆq‹6�MÒ !ØÐ&�M BÑ&Ð'×.Ñ.Ó0Ð3HÑHˆAðÐ*KÑ LàØ:×AÑAÈ1ÐRSÐAÓTñ