From 441d44e6d2b25c4ab67dcbf6da6063082e482412 Mon Sep 17 00:00:00 2001 From: Dade Date: Wed, 2 Sep 2026 20:19:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(protocol):=20OpenAI=20=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=20-=20=E8=AF=B7=E6=B1=82=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E7=A1=AC=E7=BC=96=E7=A0=81=20/v1=20=E5=89=8D?= =?UTF-8?q?=E7=BC=80=20(#399)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/go.mod | 4 ++-- .../protocol/official_catalog_test.go | 4 ++-- backend/internal/service/provider_test.go | 2 ++ plugin-packages/generate-catalog.mjs | 8 ++++---- .../openai-chat-completions.yingce-plugin | Bin 8104 -> 8097 bytes .../openai-responses.yingce-plugin | Bin 8026 -> 8018 bytes 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/backend/go.mod b/backend/go.mod index efec53e91..01a001d9c 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -5,12 +5,14 @@ go 1.25.0 require ( github.com/aws/aws-sdk-go v1.40.45 github.com/gin-gonic/gin v1.12.0 + github.com/google/uuid v1.5.0 github.com/qiniu/go-sdk/v7 v7.27.0 github.com/redis/go-redis/v9 v9.22.0 github.com/tencentyun/cos-go-sdk-v5 v0.7.75 github.com/volcengine/volc-sdk-golang v1.0.253 golang.org/x/crypto v0.54.0 golang.org/x/net v0.57.0 + golang.org/x/sync v0.22.0 gorm.io/driver/postgres v1.6.2 gorm.io/driver/sqlite v1.6.0 gorm.io/gorm v1.31.2 @@ -35,7 +37,6 @@ require ( github.com/goccy/go-yaml v1.19.2 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/google/uuid v1.5.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.10.0 // indirect @@ -60,7 +61,6 @@ require ( go.mongodb.org/mongo-driver/v2 v2.8.0 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/arch v0.29.0 // indirect - golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.40.0 // indirect google.golang.org/protobuf v1.36.11 // indirect diff --git a/backend/internal/protocol/official_catalog_test.go b/backend/internal/protocol/official_catalog_test.go index 7c7ef3b2e..8434b3c35 100644 --- a/backend/internal/protocol/official_catalog_test.go +++ b/backend/internal/protocol/official_catalog_test.go @@ -129,11 +129,11 @@ func TestOfficialAgentProfilesMapToolRequestsAndResponses(t *testing.T) { name, packageName, providerID, marker, wantPath, response, wantID, wantSignature string }{ { - name: "openai-chat", packageName: "openai-chat-completions.yingce-plugin", providerID: "chat-completion", marker: "chat", wantPath: "/v1/chat/completions", wantID: "call-chat", + name: "openai-chat", packageName: "openai-chat-completions.yingce-plugin", providerID: "chat-completion", marker: "chat", wantPath: "/chat/completions", wantID: "call-chat", response: `{"choices":[{"message":{"content":"chat answer","tool_calls":[{"id":"call-chat","function":{"name":"canvas_get_state","arguments":"{\"scope\":\"all\"}"}}]}}]}`, }, { - name: "openai-responses", packageName: "openai-responses.yingce-plugin", providerID: "openai-response", marker: "responses", wantPath: "/v1/responses", wantID: "call-responses", + name: "openai-responses", packageName: "openai-responses.yingce-plugin", providerID: "openai-response", marker: "responses", wantPath: "/responses", wantID: "call-responses", response: `{"output_text":"responses answer","output":[{"type":"message"},{"type":"function_call","call_id":"call-responses","name":"canvas_get_state","arguments":"{\"scope\":\"all\"}"}]}`, }, { diff --git a/backend/internal/service/provider_test.go b/backend/internal/service/provider_test.go index 1da377a84..b7c15412f 100644 --- a/backend/internal/service/provider_test.go +++ b/backend/internal/service/provider_test.go @@ -59,6 +59,8 @@ func TestChannelAPIURLNormalizesConfiguredVersionPrefix(t *testing.T) { {name: "same v1beta is not duplicated", base: "http://provider.test:8000/v1beta", path: "/v1beta/models/model", want: "http://provider.test:8000/v1beta/models/model"}, {name: "path carries v2", base: "http://provider.test:8000/v1", path: "/v2/tasks", want: "http://provider.test:8000/v2/tasks"}, {name: "ark v3", base: "https://ark.example.com/api/v3", path: "/images/generations", want: "https://ark.example.com/api/v3/images/generations"}, + {name: "ark v3 chat", base: "https://ark.example.com/api/v3", path: "/chat/completions", want: "https://ark.example.com/api/v3/chat/completions"}, + {name: "ark v3 responses", base: "https://ark.example.com/api/v3", path: "/responses", want: "https://ark.example.com/api/v3/responses"}, {name: "path carries ark v3", base: "https://ark.example.com", path: "/api/v3/images/generations", want: "https://ark.example.com/api/v3/images/generations"}, {name: "path carries autodl api v1", base: "https://autodl.art", path: "/api/v1/comfyui/comfyui_workflow/workflow-1", want: "https://autodl.art/api/v1/comfyui/comfyui_workflow/workflow-1"}, } diff --git a/plugin-packages/generate-catalog.mjs b/plugin-packages/generate-catalog.mjs index 10cacab48..111a4176e 100644 --- a/plugin-packages/generate-catalog.mjs +++ b/plugin-packages/generate-catalog.mjs @@ -86,7 +86,7 @@ function add(spec) { add({ id: "openai-chat-completions", providerId: "chat-completion", name: "OpenAI Chat Completions", vendor: "OpenAI", capability: "text", baseUrl: "https://api.openai.com", auth: bearer, params: textParams, - create: jsonCreate("/v1/chat/completions", { + create: jsonCreate("/chat/completions", { model: ref("request.model"), messages: ref("request.messages"), temperature: omit(ref("request.providerOptions.chat-completion.temperature")), top_p: omit(ref("request.providerOptions.chat-completion.top_p")), @@ -103,7 +103,7 @@ add({ top_logprobs: omit(ref("request.providerOptions.chat-completion.top_logprobs")), user: omit(ref("request.providerOptions.chat-completion.user")) }), - agent: jsonCreate("/v1/chat/completions", { $merge: [ref("request.extra.agent.chatCompletion"), { model: ref("request.model") }] }), + agent: jsonCreate("/chat/completions", { $merge: [ref("request.extra.agent.chatCompletion"), { model: ref("request.model") }] }), agentResponse: { textPaths: ["choices.0.message.content", "choices.0.text"], reasoningPaths: ["choices.0.message.reasoning_content"], toolCallsPath: "choices.0.message.tool_calls", toolCallIdPaths: ["id"], toolCallNamePaths: ["function.name"], toolCallArgumentsPaths: ["function.arguments"] }, response: { status: "succeeded", textPaths: ["choices.0.message.content", "choices.0.text"], reasoningPaths: ["choices.0.message.reasoning_content"], usage: ref("response.usage"), errorPaths: ["error.code"], messagePaths: ["error.message"] } }); @@ -111,7 +111,7 @@ add({ add({ id: "openai-responses", providerId: "openai-response", name: "OpenAI Responses", vendor: "OpenAI", capability: "text", baseUrl: "https://api.openai.com", auth: bearer, params: textParams, - create: jsonCreate("/v1/responses", { + create: jsonCreate("/responses", { model: ref("request.model"), input: ref("request.messages"), instructions: omit(ref("request.instructions")), temperature: omit(ref("request.providerOptions.openai-response.temperature")), top_p: omit(ref("request.providerOptions.openai-response.top_p")), @@ -123,7 +123,7 @@ add({ stream: omit(ref("request.providerOptions.openai-response.stream")), truncation: omit(ref("request.providerOptions.openai-response.truncation")), user: omit(ref("request.providerOptions.openai-response.user")) }), - agent: jsonCreate("/v1/responses", { $merge: [ref("request.extra.agent.responses"), { model: ref("request.model") }] }), + agent: jsonCreate("/responses", { $merge: [ref("request.extra.agent.responses"), { model: ref("request.model") }] }), agentResponse: { textPaths: ["output_text"], reasoningPaths: ["reasoning.summary.0.text"], toolCallsPath: "output", toolCallIdPaths: ["call_id", "id"], toolCallNamePaths: ["name"], toolCallArgumentsPaths: ["arguments"] }, response: { status: "succeeded", textPaths: ["output_text"], reasoningPaths: ["reasoning.summary.0.text"], usage: ref("response.usage"), errorPaths: ["error.code"], messagePaths: ["error.message"] } }); diff --git a/plugin-packages/openai-chat-completions.yingce-plugin b/plugin-packages/openai-chat-completions.yingce-plugin index ecf5f33e957a947e02138c92f5a6d09aa917ed7d..82cdde79e9ba25052780e991c29c86d7c1a15ea2 100644 GIT binary patch delta 7492 zcmV-K9lPSFKcPPjP)h>@6aWAK2mr-cBC!n%0S(1iB3=4OqZGCb001VFB>^V`%SS4c zPXYFS4E2clwe1@t8TDAK#?lIXP^S;J^ye#pOczV~_9lH)rUy%ifF5fW%Z+-)a^W3; ze+hSl#$JtnKMx=Ds7Tjd;m6`DZGTp{16UU?UK9d;0wfM5|BXzo6sG^jCIYre=MQ|Lw z|219skN$Q>pW2}hOSJxo&XyZXTl&m9Cr$<0do0SLLoSxQK-|5vC^x(%9i)?N<7f5UY z^wlb-qzhl^k9S*M6TcW%v!4^LpOjI_n3KK*j^SrEujcZqgFt^?pd0^2=S&|6Y}lbw zHpOs6Sr#XpD#3URe_qOFMx`<4{&$;ywD^uzoW?o*ns&B-A@zPkXR9 zr)FVRpMTNVUT!>Y&6!M;9Lxh59?i;WQEl;TG4r6rSpL9yt3A@czeh{U+)};8NsaZ|uC&_r8MQ*S|Yz78cEwSuN7?<48oS&Kql6jio)FP@TAtWAvHDUk^*h zk6$;QErX)TiC+p+|H=~?e~%LpmWCog&f-(_AY&N8e|<&B|T}Pj%SnTpm-Fs zWHjyq=R|d!1AW=kgNe%-vhCnRj&K4omrF?r5piRmDcOt%A3e}xCzbe@(cjBtG};@L z2{=VjIVd_AMC3>`0dyubkkqr5kvf}})GO(nIuY&l@v?H(^&GRf$FtpkIoU-g1LaxE z|J0I@QLqem2Js6@WW^Lw5+vGt%O@6=mn=FsL?&4BP@Tm}NBE8{ zuv7fb{Owxmof35B54NTw5jf=Qg(-fhg!&au5nBB@mh8nTqXO0K5uO5fg%5p18Ay8oEd18$!`9uOD5q7$`2MZ5K1CX4QTOST_Tpj>Q&xckeY~`djw14o? zBFskskqa3NPJhQqv=N8HWakmjTfjSEcKL1(6Iss6Zpmza2<%G|p8!*pAbb<#%EUKL z;m|M!?Y-)zI=yQ>THx_sOr?|od*|}=;t2z>+B4}-y0wy$?eVX{dUR8a<}>UPrY8fS z_QZYiSUwE^C4_@$!K2o;#+Rg4z298=*4WvJMELPrpPS>$Pf$hW^B7-G>_#D$CP_(* zu{g6R{jhUc)_wdx!Fo454kL#_S@FDwOpb=s)x0-`{2kSQQDryyCtX`iQw z#;bW+evMZE^}1e~()NqAv-sHo$?16n$uD=Uz(8ubUX z_?jy~kBZH;8qdXz`JcdG?r5&0aks9o?(5|WPvUg3+$cc?pJ&>B{5!~R|Lni^=Sx?H zul8Mk>;Kc0n}frbu3sCx(RXQZ_~u~WjX_9(pP*G&#f&rx^^3ssyLoxdZl)p;t+ojs z7XEtk`ZdU{_qlvD`|BdDeBb=Gh&N`Oz6YzVxM1gKu-TY?W8c7-S2XMn9Bjs`=5H6_ z!@63U;`h(+VO`iw>8oqamn9rwx6kmw?w1jNvI6t<1H)a`-_F1X4V8R)R zYZn0r#go|t3u;y;#?9+xoSecT-QB}2i(OHfE@As1%p}BObLxl|%jVAbe9M@A2_}Iz zns>MKZ&tyiX5k^NKLoQ)pKWWkBF^9TEI5>wS7EC{YS;_cwi+7;`t~~f$>uB`kE08J zBVR@Y0m@kEAF#t>&DkqNCm{bMNKY=6ACoe%+aE^H8A64&swAsuWe!dfB_T_!$Y>)#;Bm`u=FBpH1p-)X@^Q`ta{8FN zo};zO4i_HJ1Hz3feV4CZ=}9LsHW34VD-tM7Mn!NIjOz1;5Y9%S#I6Ec)5qi4o+*8M zgKj`ZDmSOgbfXNFI#wvw#C*c_gvu~2DGKviuW$>7U=U&p3r1G$<}(ZtMp?GQjUyR_ zfgwhoU{}9+*)sD>jyfulRIYO*)vi%6pGDonjo}$&bAk+(0`*S@XgR^+civnua4h5{2>hWFCKeEb73Y zywHIK)(v)u5q5L!#CC-D;*K${^EO?#MmsxoC!Re|Kzhv%XbK)OL zykU59o7#x**y3qic5MsmK>Su#1TpvM@9&^?y|7xHiV!=@{_DvNY1gkk&c2{lZuhf< z9g-01SR?o}ljLq3AD1iKJ>`>FVs&6b>~VFZPiI$%q(GBA&FyXt^R{`~8h3K5f?Dav zWxJ3rd$$&vouv@N%pU!JDbjc#d+%yGX}jNLY+&`oTN2(vhc^&VG;1HY3LR`8AjIE1 zaMy9I<^ivYJgoy4GTv``bP%ix#XAfDe#s_yx&tn(Nw3STI;0bJ7H(UP&dn-_siUdm zg9ZrgrakZBHrZZJwjG^^hD=abx;ZwnlPK7F4d5!Kt$%)!K)ZZ@?*;C(7Cty>rF;q3k?mzb7yODz$>ZhP4;lRA?iUTma&o_FXv41cydgLSBF^8eO%|ENR_!q@_AA#evj+Qr z0Z>Z=1QY-O00;oZSR!4W77}5+5C8yAlMN0eHzIzdT&_}pBqT9VAg3yYRNB$*NLqVu z*_oxR0#!-Cq6;e|K*(H;WF%XFC82;p(rVF<@%HTQlV}bhfAgt-Xazl$%f?P9vC&j^ zIH7gr)5YObw)^tOv7?wKmBf9yyp~l{#}Xr|aV(L`a9aq}@qPPZUylgAMc%pww^uP=9r+vH9NI zx`t-w8XFttf85<#<=s!?*BGB%qL|ULhH7#8Nb%v-m+i|oHdpJ9H&FGy`CyZ>MjH>z z#T}ltxjSE9ng9W4{&xM)kQsgjCwe(pmGV#EH$dtpZChO z?b+Igr;Q&M>u)Oc$}@DcRIhF*@sXTvoQNyU@oUY}e=K^q1_H5$XrpZ2e{0@eMRU&^ z-%lu)z(Bn_l{K`&kP35{N%sHF)AV~b_}H;y_=m3x6v`K^e{F93NGLy2sOgQ}SG7u& z@KC55lryJ(-h1R{aGXdyrkpS2E~k=Ofl&)&7FFYV70o=x1cvsNVYN0Z4;mXQ${$r- zQ$D}&e|OwHViEcb({IhE*PAc4(99a99@Nx=Rl zSC#r!1$}c1KG1#%Ex*Da^RH?<)5=v$1~a8dfBwZ?aWMXG+GrfwbS+WP4ETU>g@1d_ zpHZL(lM(3?=Z+)!NmHML=F~qDhqRrwTCq|{|eo{ ze~IS)ZN8f_CpOXDGOFG~)3f!3HFN5HD;xGfsyjD<+VnM@1*@;!FYL{-iw0GlwPv){isbMk)?^jXjJ=%B#f$ZimkQm9O62$o2;1^oLxGK6^prWjr zQD^oNdpz2*% zZ%hbTnRErvZ41_c`E&N%Zsl`V12XppYP^a-XeW4>4Zkkdb>w^BNnY=JV-Pg6!zsU+B54X9#vjmz{3nSNdYVe=TT3eX$dL zv4RFp(hb_%7aNm~J93v2Qv>iQN9Qyq{!&2BGc?P)oPl79p z9hyMK(@(4E zjnPAs>f!9CLLO!s=(I!EKxFKvKsq-JtOgHnnOY2k(&eEG<(c{kF6#8adME-hGhUF2 zZ!bYxFeM1L15?^48!#P#&9p7dXocYxy8x2|dN`L+wjZ#4TIw5Xe-DSWAGeQI_Knk= zeu1{`Hy1YOtu-Ebsl-DKvqLBpHMenwqW3JzP@}}%Ak-j|?ZQ#w1RRo*>c%*nlJWKEAjvPMXWl z>8Tx#?6m#^GSq?!f2$l$`EWsn%Um~ENdt7{q0ODf)-qg88k?*18*b37hV|r!#_lW3 zXm8wH_@L;C5iO&#GSuFq#<#D~#(r(P(s(|Bre8Xh40@BHB>~A@1>ezemwjzuH=OsI z=);Y$_XjI%A#5NFbe3%NVj=;diFePqNQiHB=OLBpmyY){e{vcSde?F5ly2p(z~O)J z4#%C6F%Zy@@!;m#Qm#!o;IBauQ%dd`d^dN?usgIuAy*JIAZ=i6Qj-W`N=b*XJ|T-= zIGB_Dc(nAid*GqCThIlUEYx&bKksaUUUoFQV6s+x&LjohQpr|B&cfOi1`QRnq{h^R zYwE4W_Y{Une^p!eW1?CFj1#wpYumS*3lAHco4A#gv}b1MdQ}Wn|FWAdKTRNh6;oR8yEP*>aq++jF5866dGHw9nLRY6#9l3XcuY8XPGjRaU{( z%3m*@I}2I)HdO-KezSx&zG*%z;qoBm(1j0ke;9LM`5g>zOun_tOsoz?pa3u&*V-S> z!-rKwo1g`F_^`^86Xw!#^JN*gkm@^pkn%e2c?J{rEumdB-%Y^>jVBrwxSiI{VCKmX z*A4_;io1}VI4i8<85-Y1ueb1qM{04*DP$Lg>4czcPVA%7EZbL~tTiTIf=S?w=Jhr6 zf9oYMsX2ZZRquk?%xCMhN(oQm`ZTx{%`U+vheyLsy1Z6j*)`Xn!++Vt#p7{uBFi&vM4X}atZQgcTw=o#m0i)Y#I)M z3zQdx!8y$M$)fB&q4Ps&os*4=l4cF%f5PdWQ=gsg$|P|BD;{`DF>mcb)HlYy#T{g%#66F#Bs8 z9MaZ+gql|eQ|XkE(%izCbI5VRY3p|l))TP8WW&^CCIvSZ0{Ye~?=tq~KzoAV?AtF}ytl z88x3LLxTi)5}+5is&>uGqV|933wM}pE0PDf$e_M=ji9aO3 zZWu=hz;Bz@x`3PjV<`rFaASkzd5jd0>2{5z;87>c^O58+%nO~jyLdUkDZoI6!5`eh zAnZPr;WBK$?Rh28SAf~%k-%Y0tNU?5s6^#{d~g60ZLlrCP}eJl!!g)jtdFh2>xecj z_F#N1tv+t!wQf1cvLkyw8u!~6{O zK4p=O6%C0jCdx|~sRG`{{x+f{mp+K!+lUe(uq{RH4YjlC+F~Os?b(Vur?^LSWaX_5 zu5&tD65CKU*U?l*(ZR^NGW)H$^s znQa|3{u?U0Z!%{O$rQt1$oHocHZFW8R}#NaqHhTi1olqGUtj*^O^{mrBb)$6fA)JE7q7s@eZfB#e!a8o zddNd3HTWHm&v^ELN2+8h8BPcLMURw=@VF-oL-!M(V6NP2AHR^XK3xcJUv`YVSZMX$ z1D~u^>A>WRgHta3el>XARu$N2K z3i_RCM#}@;oH%MYEWw!F(9eyc2)9TtgSRCz^Jh)Y^a6`fESi*|9e)hQF--FrZBS~tKfcQo= zOepdO8`r*7GIY09w(|jYqgqHy!hVJ^F!umyT*_WtP3_{hE@P#qCkow)2OV0+!J=^$ z$9>SjB^=!2Dc}g_IH!6;Petz9jhh%3ZUh|^f9r%IHbV!#bJMWk>LM{0)tKmV>l_k> zokbhSk>9LjOzje$q*o#|0u~z+xQzwtNw%X-Xh;M_(v921+ELKLT!q85^~XCzYL|$% ziY7=DkHkMb%qo@aY3q+T{ke2|-i(1=@lADXAy|(gvuV7ku~=ZeCUi70NNe^0002dz+E5! delta 7492 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 D7&BQY diff --git a/plugin-packages/openai-responses.yingce-plugin b/plugin-packages/openai-responses.yingce-plugin index df88683abce0a839b710b1d8cc84f440553c0ec0..f0ee2178b0875146e48eae605bcc55dcc802e625 100644 GIT binary patch delta 7165 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 YpBC=_XW9RL1P{X4sA*7ORR7uh52!SdJOBUy