Files
assist/src/agent/__pycache__/llm_client.cpython-311.pyc

74 lines
15 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>h"<00><00>D<00>dZddlZddlZddlZddlmZmZmZmZddl m
Z
m Z ddl m Z eje<0F><00>Ze Gd<06>d<07><00><00><00>ZGd<08>d e
<EFBFBD><00>ZGd
<EFBFBD>d e<12><00>ZGd <0C>d e<12><00>ZGd<0E>de<12><00>ZGd<10>d<11><00>ZGd<12>d<13><00>ZdS)uH
大模型客户端 - 统一的LLM接口
支持多种大模型提供商
<EFBFBD>N)<04>Dict<63>Any<6E>Optional<61>List)<02>ABC<42>abstractmethod)<01> dataclassc<00>l<00>eZdZUdZeed<eed<dZeeed<dZeed<dZ e
ed <d
Z e ed <dS) <0C> LLMConfigu LLM配置<E9858D>provider<65>api_keyN<79>base_urlz gpt-3.5-turbo<62>modelgffffff<66>?<3F> temperaturei<65><00>
max_tokens) <0A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>str<74>__annotations__rrrr<00>floatr<00>int<6E><00><00>>c:\Users\jiezhao\Desktop\TSP_assistant\src\agent\llm_client.pyr r sm<00><00><00><00><00><00><00><13>O<EFBFBD><11>M<EFBFBD>M<EFBFBD>M<EFBFBD> <10>L<EFBFBD>L<EFBFBD>L<EFBFBD>"<22>H<EFBFBD>h<EFBFBD>s<EFBFBD>m<EFBFBD>"<22>"<22>"<22> <20>E<EFBFBD>3<EFBFBD> <20> <20> <20><1C>K<EFBFBD><15><1C><1C><1C><1A>J<EFBFBD><03><1A><1A><1A><1A>rr c<00>n<00>eZdZdZededefd<04><04><00>Zedeeeefdefd<06><04><00>Z dS)<08> BaseLLMClientuLLM客户端基类<E59FBA>prompt<70>returnc<00><00>
K<00>dS)<02> 生成文本Nr<00><03>selfr<00>kwargss r<00>generatezBaseLLMClient.generate<00> <00><00><00><00> <0A>r<00>messagesc<00><00>
K<00>dS)<02> 对话生成Nr)r$r(r%s r<00>chatzBaseLLMClient.chat#r'rN)
rrrrrrr&rrr+rrrrrs<><00><00><00><00><00><00><1C><1C><13> <0A>S<EFBFBD> <0A>s<EFBFBD> <0A> <0A> <0A><14>^<5E> <0A><14> <0A>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>#7<> <0A>c<EFBFBD> <0A> <0A> <0A><14>^<5E> <0A> <0A> rrc<00><><00>eZdZdZdefd<03>Zd<04>Zdedefd<07>Zde e
eefdefd <09>Z dedefd
<EFBFBD>Z de e
eefdefd <0B>Z d S) <0A> OpenAIClientuOpenAI客户端<E688B7>configc<00>J<00>||_d|_|<00><00><00>dS<00>N<>r.<00>client<6E> _init_client<6E>r$r.s r<00>__init__zOpenAIClient.__init__+<00>(<00><00><1C><04> <0B><1A><04> <0B> <0C><19><19><1B><1B><1B><1B>rc<00><><00> ddl}|<01>|jj|jj<00><03><00>|_dS#t $r%t<00>d<04><00>d|_YdSwxYw)<05>初始化客户端rN)r ru-OpenAI库未安装将使用模拟客户端) <09>openai<61> AsyncOpenAIr.r rr2<00> ImportError<6F>logger<65>warning)r$r9s rr3zOpenAIClient._init_client0s}<00><00> <1F> <19>M<EFBFBD>M<EFBFBD>M<EFBFBD> <20>,<2C>,<2C><1C> <0B>+<2B><1D><1B>-<2D>-<2D><0E><0E>D<EFBFBD>K<EFBFBD>K<EFBFBD>K<EFBFBD><4B><1B> <1F> <1F> <1F> <12>N<EFBFBD>N<EFBFBD>J<> K<> K<> K<><1E>D<EFBFBD>K<EFBFBD>K<EFBFBD>K<EFBFBD>K<EFBFBD> <1F><><EFBFBD>s<00>48<00>+A'<03>&A'rr c <00><00><>K<00>|js|<00>|<01><00>S |jjj<00>|jjd|d<02>g|<02>d|jj<00><00>|<02>d|jj <00><00><00><05><00><00>d{V<00><03>}|j
dj j S#t$r<}t<00>d|<04><00><02><00>|<00>|<01><00>cYd}~Sd}~wwxYw) r"<00>user<65><02>role<6C>contentrr<00>rr(rrNruOpenAI API调用失败: )r2<00>_simulate_responser+<00> completions<6E>creater.r<00>getrr<00>choices<65>messagerB<00> Exceptionr<<00>error<6F>r$rr%<00>response<73>es rr&zOpenAIClient.generate<s<00><00><00><00><13>{<7B> 3<><17>*<2A>*<2A>6<EFBFBD>2<>2<> 2<>
3<>!<21>[<5B>-<2D>9<>@<40>@<40><1A>k<EFBFBD>'<27>#)<29>f<EFBFBD>=<3D>=<3D>><3E>"<22>J<EFBFBD>J<EFBFBD>}<7D>d<EFBFBD>k<EFBFBD>6M<36>N<>N<>!<21>:<3A>:<3A>l<EFBFBD>D<EFBFBD>K<EFBFBD>4J<34>K<>K<> A<01><0E><0E><0E><0E><0E><0E><0E><0E>H<EFBFBD> <1C>#<23>A<EFBFBD>&<26>.<2E>6<> 6<><36><18> 3<> 3<> 3<> <12>L<EFBFBD>L<EFBFBD>7<>A<EFBFBD>7<>7<> 8<> 8<> 8<><17>*<2A>*<2A>6<EFBFBD>2<>2<> 2<> 2<> 2<> 2<> 2<> 2<><32><EFBFBD><EFBFBD><EFBFBD> 3<><33><EFBFBD>s<00>BB/<00>/
C5<03>91C0<03>*C5<03>0C5r(c <00><00><>K<00>|js|<00>|<01><00>S |jjj<00>|jj||<02>d|jj<00><00>|<02>d|jj <00><00><00><03><00><00>d{V<00><03>}|j
dj j S#t$r<}t<00>d|<04><00><02><00>|<00>|<01><00>cYd}~Sd}~wwxYw)r*rrrCNruOpenAI Chat API调用失败: )r2<00>_simulate_chatr+rErFr.rrGrrrHrIrBrJr<rK<00>r$r(r%rMrNs rr+zOpenAIClient.chatMs<00><00><00><00><13>{<7B> 1<><17>&<26>&<26>x<EFBFBD>0<>0<> 0<>
1<>!<21>[<5B>-<2D>9<>@<40>@<40><1A>k<EFBFBD>'<27>!<21>"<22>J<EFBFBD>J<EFBFBD>}<7D>d<EFBFBD>k<EFBFBD>6M<36>N<>N<>!<21>:<3A>:<3A>l<EFBFBD>D<EFBFBD>K<EFBFBD>4J<34>K<>K<> A<01><0E><0E><0E><0E><0E><0E><0E><0E>H<EFBFBD> <1C>#<23>A<EFBFBD>&<26>.<2E>6<> 6<><36><18> 1<> 1<> 1<> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D><17>&<26>&<26>x<EFBFBD>0<>0<> 0<> 0<> 0<> 0<> 0<> 0<><30><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD>s<00>B
B+<00>+
C1<03>51C,<03>&C1<03>,C1c<00><00>d|dd<03><00>d<04>S)<05> 模拟响应u模拟LLM响应: N<>d<00>...r<00>r$rs rrDzOpenAIClient._simulate_response^s<00><00>4<>6<EFBFBD>$<24>3<EFBFBD>$<24><<3C>4<>4<>4<>4rc<00>B<00>|r|ddnd}d|dd<06><00>d<07>S)<08>模拟对话响应<E5938D><E5BA94><EFBFBD><EFBFBD><EFBFBD>rB<00>u模拟对话响应: NrTrUr<00>r$r(<00> last_messages rrPzOpenAIClient._simulate_chatbs4<00><00>2:<3A>B<>x<EFBFBD><02>|<7C>I<EFBFBD>.<2E>.<2E><02> <0C>=<3D>l<EFBFBD>4<EFBFBD>C<EFBFBD>4<EFBFBD>&8<>=<3D>=<3D>=<3D>=rN<>rrrrr r5r3rr&rrr+rDrPrrrr-r-(s<><00><00><00><00><00><00><19><19><1C>y<EFBFBD><1C><1C><1C><1C>
<1F>
<1F>
<1F>3<>S<EFBFBD>3<>s<EFBFBD>3<>3<>3<>3<>"1<>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>#7<>1<>c<EFBFBD>1<>1<>1<>1<>"5<><13>5<><13>5<>5<>5<>5<>><3E>t<EFBFBD>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>';<3B>><3E><03>><3E>><3E>><3E>><3E>><3E>>rr-c<00><><00>eZdZdZdefd<03>Zd<04>Zdedefd<07>Zde e
eefdefd <09>Z dedefd
<EFBFBD>Z de e
eefdefd <0B>Z d S) <0A>AnthropicClientuAnthropic客户端r.c<00>J<00>||_d|_|<00><00><00>dSr0r1r4s rr5zAnthropicClient.__init__jr6rc<00><><00> ddl}|<01>|jj<00><03><00>|_dS#t
$r%t <00>d<04><00>d|_YdSwxYw)r8rN)r u0Anthropic库未安装将使用模拟客户端)<08> anthropic<69>AsyncAnthropicr.r r2r;r<r=)r$rbs rr3zAnthropicClient._init_clientosx<00><00> <1F> <1C> <1C> <1C> <1C>#<23>2<>2<><1C> <0B>+<2B>3<><0E><0E>D<EFBFBD>K<EFBFBD>K<EFBFBD>K<EFBFBD><4B><1B> <1F> <1F> <1F> <12>N<EFBFBD>N<EFBFBD>M<> N<> N<> N<><1E>D<EFBFBD>K<EFBFBD>K<EFBFBD>K<EFBFBD>K<EFBFBD> <1F><><EFBFBD>s<00>)-<00>+A<03>Arr c<00><00><>K<00>|js|<00>|<01><00>S |jj<00>|jj|<02>d|jj<00><00>|<02>d|jj<00><00>d|d<04>g<01><05><00><00>d{V<00><03>}|j dj
S#t$r<}t<00> d|<04><00><02><00>|<00>|<01><00>cYd}~Sd}~wwxYw) r"rrr?r@<00>rrrr(NruAnthropic API调用失败: )r2rDr(rFr.rrGrrrB<00>textrJr<rKrLs rr&zAnthropicClient.generatezs<00><00><00><00><13>{<7B> 3<><17>*<2A>*<2A>6<EFBFBD>2<>2<> 2<>
3<>!<21>[<5B>1<>8<>8<><1A>k<EFBFBD>'<27>!<21>:<3A>:<3A>l<EFBFBD>D<EFBFBD>K<EFBFBD>4J<34>K<>K<>"<22>J<EFBFBD>J<EFBFBD>}<7D>d<EFBFBD>k<EFBFBD>6M<36>N<>N<>#)<29>f<EFBFBD>=<3D>=<3D>><3E> 9<><0E><0E><0E><0E><0E><0E><0E><0E>H<EFBFBD> <1C>#<23>A<EFBFBD>&<26>+<2B> +<2B><><18> 3<> 3<> 3<> <12>L<EFBFBD>L<EFBFBD>:<3A>q<EFBFBD>:<3A>:<3A> ;<3B> ;<3B> ;<3B><17>*<2A>*<2A>6<EFBFBD>2<>2<> 2<> 2<> 2<> 2<> 2<> 2<><32><EFBFBD><EFBFBD><EFBFBD> 3<><33><EFBFBD>s<00>BB%<00>%
C+<03>/1C&<03> C+<03>&C+r(c<00><00><>K<00>|js|<00>|<01><00>S |jj<00>|jj|<02>d|jj<00><00>|<02>d|jj<00><00>|<01><03><00><00>d{V<00><03>}|j dj
S#t$r<}t<00> d|<04><00><02><00>|<00>|<01><00>cYd}~Sd}~wwxYw)r*rrreNru Anthropic Chat API调用失败: )r2rPr(rFr.rrGrrrBrfrJr<rKrQs rr+zAnthropicClient.chat<61>s <00><00><00><00><13>{<7B> 1<><17>&<26>&<26>x<EFBFBD>0<>0<> 0<>
1<>!<21>[<5B>1<>8<>8<><1A>k<EFBFBD>'<27>!<21>:<3A>:<3A>l<EFBFBD>D<EFBFBD>K<EFBFBD>4J<34>K<>K<>"<22>J<EFBFBD>J<EFBFBD>}<7D>d<EFBFBD>k<EFBFBD>6M<36>N<>N<>!<21> 9<><0E><0E><0E><0E><0E><0E><0E><0E>H<EFBFBD> <1C>#<23>A<EFBFBD>&<26>+<2B> +<2B><><18> 1<> 1<> 1<> <12>L<EFBFBD>L<EFBFBD>?<3F>A<EFBFBD>?<3F>?<3F> @<40> @<40> @<40><17>&<26>&<26>x<EFBFBD>0<>0<> 0<> 0<> 0<> 0<> 0<> 0<><30><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD>s<00>BB!<00>!
C'<03>+1C"<03>C'<03>"C'c<00><00>d|dd<03><00>d<04>S)rSu模拟Anthropic响应: NrTrUrrVs rrDz"AnthropicClient._simulate_response<73>s<00><00>:<3A><16><04><13><04><1C>:<3A>:<3A>:<3A>:rc<00>B<00>|r|ddnd}d|dd<06><00>d<07>S)rXrYrBrZu模拟Anthropic对话: NrTrUrr[s rrPzAnthropicClient._simulate_chat<61>s4<00><00>2:<3A>B<>x<EFBFBD><02>|<7C>I<EFBFBD>.<2E>.<2E><02> <0C>@<40><1C>d<EFBFBD>s<EFBFBD>d<EFBFBD>);<3B>@<40>@<40>@<40>@rNr]rrrr_r_gs<><00><00><00><00><00><00><1C><1C><1C>y<EFBFBD><1C><1C><1C><1C>
<1F> <1F> <1F>3<>S<EFBFBD>3<>s<EFBFBD>3<>3<>3<>3<>"1<>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>#7<>1<>c<EFBFBD>1<>1<>1<>1<>";<3B><13>;<3B><13>;<3B>;<3B>;<3B>;<3B>A<01>t<EFBFBD>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>';<3B>A<01><03>A<01>A<01>A<01>A<01>A<01>Arr_c<00>`<00>eZdZdZdefd<03>Zd<04>Zdedefd<07>Zde e
eefdefd <09>Z d
S) <0B>LocalLLMClientu本地LLM客户端r.c<00>J<00>||_d|_|<00><00><00>dSr0r1r4s rr5zLocalLLMClient.__init__<5F>r6rc<00><><00> t<00>d<01><00>dS#t$r(}t<00>d|<01><00><02><00>Yd}~dSd}~wwxYw)u初始化本地客户端u本地LLM客户端初始化u#本地LLM客户端初始化失败: N)r<<00>inforJr=)r$rNs rr3zLocalLLMClient._init_client<6E>sq<00><00> F<01> <12>K<EFBFBD>K<EFBFBD>5<> 6<> 6<> 6<> 6<> 6<><36><18> F<01> F<01> F<01> <12>N<EFBFBD>N<EFBFBD>D<><11>D<>D<> E<> E<> E<> E<> E<> E<> E<> E<> E<><45><EFBFBD><EFBFBD><EFBFBD> F<01><><EFBFBD>s<00><00>
A<03>A <03> Arr c<00><00>"K<00>d|dd<03><00>d<04>S)r"u本地LLM响应: NrTrUrr#s rr&zLocalLLMClient.generate<74>s!<00><00><00><00>5<>6<EFBFBD>$<24>3<EFBFBD>$<24><<3C>4<>4<>4<>4rr(c<00><00>FK<00>|r|ddnd}d|dd<06><00>d<07>S)r*rYrBrZu本地LLM对话: NrTrUr)r$r(r%r\s rr+zLocalLLMClient.chat<61>s8<00><00><00><00>2:<3A>B<>x<EFBFBD><02>|<7C>I<EFBFBD>.<2E>.<2E><02> <0C>:<3A><<3C><04><13><04>#5<>:<3A>:<3A>:<3A>:rN) rrrrr r5r3rr&rrr+rrrrkrk<00>s<><00><00><00><00><00><00><1C><1C><1C>y<EFBFBD><1C><1C><1C><1C>
F<01>F<01>F<01>5<>S<EFBFBD>5<>s<EFBFBD>5<>5<>5<>5<>
;<3B>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>#7<>;<3B>c<EFBFBD>;<3B>;<3B>;<3B>;<3B>;<3B>;rrkc<00>2<00>eZdZdZededefd<04><04><00>ZdS)<06>LLMClientFactoryuLLM客户端工厂r.r c<00>8<00>|j<00><00><00>dkrt|<00><00>S|j<00><00><00>dkrt|<00><00>S|j<00><00><00>dkrt |<00><00>St d|j<00><00><02><00><00>)u创建LLM客户端r9rb<00>localu不支持的LLM提供商: )r <00>lowerr-r_rk<00>
ValueError)r.s r<00> create_clientzLLMClientFactory.create_client<6E>s<><00><00> <12>?<3F> <20> <20> "<22> "<22>h<EFBFBD> .<2E> .<2E><1F><06>'<27>'<27> '<27> <13>_<EFBFBD> "<22> "<22> $<24> $<24> <0B> 3<> 3<>"<22>6<EFBFBD>*<2A>*<2A> *<2A> <13>_<EFBFBD> "<22> "<22> $<24> $<24><07> /<2F> /<2F>!<21>&<26>)<29>)<29> )<29><1C>K<>&<26>/<2F>K<>K<>L<>L<> LrN)rrrr<00> staticmethodr rrwrrrrrrr<00>sN<00><00><00><00><00><00><1C><1C><11> M<01>i<EFBFBD> M<01>M<EFBFBD> M<01> M<01> M<01><12>\<5C> M<01> M<01> Mrrrc<00>v<00>eZdZdZdefd<03>Zdedefd<06>Zdee eefdefd<08>Z
de ee ffd <09>Z d
S) <0B>
LLMManageru LLM管理器r.c<00>h<00>||_t<00>|<01><00>|_dddd<02>|_dS)Nr)<03>total_requests<74> total_tokens<6E> error_count)r.rrrwr2<00> usage_statsr4s rr5zLLMManager.__init__<5F>s<<00><00><1C><04> <0B>&<26>4<>4<>V<EFBFBD><<3C><<3C><04> <0B><1F><1D><1C>
<EFBFBD>
<EFBFBD><04><18><18>rrr c<00><00>6K<00> |jdxxdz cc<|jj|fi|<02><01><01>d{V<00><03>}|jdxxt|<03><00>z cc<|S#t$r8}|jdxxdz cc<t
<00>d|<04><00><02><00><00>d}~wwxYw)r"r|<00>Nr}r~uLLM生成失败: )rr2r&<00>lenrJr<rKrLs rr&zLLMManager.generate<74>s<><00><00><00><00> <12> <10> <1C>-<2D> .<2E> .<2E> .<2E>!<21> 3<> .<2E> .<2E> .<2E>1<>T<EFBFBD>[<5B>1<>&<26>C<>C<>F<EFBFBD>C<>C<>C<>C<>C<>C<>C<>C<>H<EFBFBD> <10> <1C>^<5E> ,<2C> ,<2C> ,<2C><03>H<EFBFBD> <0A> <0A> =<3D> ,<2C> ,<2C> ,<2C><1B>O<EFBFBD><4F><18> <12> <12> <12> <10> <1C>]<5D> +<2B> +<2B> +<2B>q<EFBFBD> 0<> +<2B> +<2B> +<2B> <12>L<EFBFBD>L<EFBFBD>0<>Q<EFBFBD>0<>0<> 1<> 1<> 1<> <11><><EFBFBD><EFBFBD><EFBFBD> <12><><EFBFBD><EFBFBD><00>AA<00>
B<03> 3B<03>Br(c<00><00>6K<00> |jdxxdz cc<|jj|fi|<02><01><01>d{V<00><03>}|jdxxt|<03><00>z cc<|S#t$r8}|jdxxdz cc<t
<00>d|<04><00><02><00><00>d}~wwxYw)r*r|r<>Nr}r~uLLM对话失败: )rr2r+r<>rJr<rKrQs rr+zLLMManager.chat<61>s<><00><00><00><00> <12> <10> <1C>-<2D> .<2E> .<2E> .<2E>!<21> 3<> .<2E> .<2E> .<2E>-<2D>T<EFBFBD>[<5B>-<2D>h<EFBFBD>A<>A<>&<26>A<>A<>A<>A<>A<>A<>A<>A<>H<EFBFBD> <10> <1C>^<5E> ,<2C> ,<2C> ,<2C><03>H<EFBFBD> <0A> <0A> =<3D> ,<2C> ,<2C> ,<2C><1B>O<EFBFBD><4F><18> <12> <12> <12> <10> <1C>]<5D> +<2B> +<2B> +<2B>q<EFBFBD> 0<> +<2B> +<2B> +<2B> <12>L<EFBFBD>L<EFBFBD>0<>Q<EFBFBD>0<>0<> 1<> 1<> 1<> <11><><EFBFBD><EFBFBD><EFBFBD> <12><><EFBFBD>r<EFBFBD>c<00>4<00>|j<00><00><00>S)u获取使用统计)r<00>copy)r$s r<00>get_usage_statszLLMManager.get_usage_stats<74>s<00><00><13><1F>$<24>$<24>&<26>&<26>&rN) rrrrr r5rr&rrr+rr<>rrrrzrz<00>s<><00><00><00><00><00><00><16><16>
<EFBFBD>y<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<12>S<EFBFBD>
<12>s<EFBFBD>
<12>
<12>
<12>
<12>
<12>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>#7<>
<12>c<EFBFBD>
<12>
<12>
<12>
<12>'<27><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>'<27>'<27>'<27>'<27>'<27>'rrz)r<00>logging<6E>asyncio<69>json<6F>typingrrrr<00>abcrr<00> dataclassesr <00> getLoggerrr<r rr-r_rkrrrzrrr<00><module>r<>s<><00><01><04><04>
<0F><0E><0E><0E><0E><0E><0E><0E> <0B> <0B> <0B> <0B>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>!<21>!<21>!<21>!<21>!<21>!<21> <1A><17> <1A>8<EFBFBD> $<24> $<24><06>
<EFBFBD><1B><1B><1B><1B><1B><1B><1B> <0B><19><1B>  <0A>  <0A>  <0A>  <0A>  <0A>C<EFBFBD>  <0A>  <0A>  <0A>=><3E>=><3E>=><3E>=><3E>=><3E>=<3D>=><3E>=><3E>=><3E>~<A<01><A<01><A<01><A<01><A<01>m<EFBFBD><A<01><A<01><A<01>|;<3B>;<3B>;<3B>;<3B>;<3B>]<5D>;<3B>;<3B>;<3B>4 M<01> M<01> M<01> M<01> M<01> M<01> M<01> M<01>&'<27>&'<27>&'<27>&'<27>&'<27>&'<27>&'<27>&'<27>&'<27>&'r