@ainetwork/adk-provider-model-azure 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/index.ts +9 -1
- package/package.json +3 -3
- package/tests/generate-messages-history.test.ts +66 -0
package/dist/index.cjs
CHANGED
|
@@ -63,9 +63,10 @@ var AzureOpenAI = class extends import_modules.BaseModel {
|
|
|
63
63
|
const { query, thread, systemPrompt } = params;
|
|
64
64
|
const messages = !systemPrompt ? [] : [{ role: "system", content: systemPrompt.trim() }];
|
|
65
65
|
const sessionContent = !thread ? [] : thread.messages.map((message) => {
|
|
66
|
+
const content = typeof message.metadata?.query === "string" ? message.metadata.query : message.content.parts[0];
|
|
66
67
|
return {
|
|
67
68
|
role: this.getMessageRole(message.role),
|
|
68
|
-
content
|
|
69
|
+
content
|
|
69
70
|
};
|
|
70
71
|
});
|
|
71
72
|
const userContent = { role: "user", content: query };
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n\ttype AssistantToolCallTurn,\n\tBaseModel,\n\ttype ModelFetchOptions,\n\ttype ToolResultMessage,\n} from \"@ainetwork/adk/modules\";\nimport type {\n\tConnectorTool,\n\tFetchResponse,\n\tToolCall,\n} from \"@ainetwork/adk/types/connector\";\nimport {\n\ttype MessageObject,\n\tMessageRole,\n\ttype ThreadObject,\n} from \"@ainetwork/adk/types/memory\";\nimport type {\n\tLLMStream,\n\tStreamChunk,\n\tToolCallDelta,\n} from \"@ainetwork/adk/types/stream\";\nimport { AzureOpenAI as AzureOpenAIClient } from \"openai\";\nimport type {\n\tChatCompletionMessageParam as CCMessageParam,\n\tChatCompletionChunk,\n\tChatCompletionMessageFunctionToolCall,\n\tChatCompletionMessageToolCall,\n\tChatCompletionTool,\n} from \"openai/resources\";\n\nexport interface AzureOpenAIConfig {\n\tendpoint?: string;\n\tdeployment?: string;\n\tbaseUrl?: string;\n\tapiKey: string;\n\tapiVersion: string;\n\tmodelName: string;\n}\n\nexport class AzureOpenAI extends BaseModel<CCMessageParam, ChatCompletionTool> {\n\tprivate client: AzureOpenAIClient;\n\tprivate modelName: string;\n\n\tconstructor({\n\t\tendpoint,\n\t\tdeployment,\n\t\tbaseUrl,\n\t\tapiKey,\n\t\tapiVersion,\n\t\tmodelName,\n\t}: AzureOpenAIConfig) {\n\t\tsuper();\n\t\tconst options = {\n\t\t\tendpoint,\n\t\t\tapiKey,\n\t\t\tdeployment,\n\t\t\tapiVersion,\n\t\t\tbaseURL: baseUrl,\n\t\t};\n\t\tthis.client = new AzureOpenAIClient(options);\n\t\tthis.modelName = modelName;\n\t}\n\n\tprivate getMessageRole(role: MessageRole) {\n\t\tswitch (role) {\n\t\t\tcase MessageRole.USER:\n\t\t\t\treturn \"user\";\n\t\t\tcase MessageRole.MODEL:\n\t\t\tcase MessageRole.SYSTEM:\n\t\t\t\treturn \"system\";\n\t\t\tdefault:\n\t\t\t\treturn \"system\"; /*FIXME*/\n\t\t}\n\t}\n\n\tgenerateMessages(params: {\n\t\tquery: string;\n\t\tthread?: ThreadObject;\n\t\tsystemPrompt?: string;\n\t}): CCMessageParam[] {\n\t\tconst { query, thread, systemPrompt } = params;\n\t\tconst messages: CCMessageParam[] = !systemPrompt\n\t\t\t? []\n\t\t\t: [{ role: \"system\", content: systemPrompt.trim() }];\n\t\tconst sessionContent: CCMessageParam[] = !thread\n\t\t\t? []\n\t\t\t: thread.messages.map((message: MessageObject) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: this.getMessageRole(message.role),\n\t\t\t\t\t\tcontent: message.content.parts[0] as string,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\tconst userContent: CCMessageParam = { role: \"user\", content: query };\n\t\treturn messages.concat(sessionContent).concat(userContent);\n\t}\n\n\tappendAssistantToolCallTurn(\n\t\tmessages: CCMessageParam[],\n\t\tturn: AssistantToolCallTurn,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: turn.content,\n\t\t\ttool_calls: turn.toolCalls.map(\n\t\t\t\t(tc): ChatCompletionMessageFunctionToolCall => ({\n\t\t\t\t\tid: tc.id,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: {\n\t\t\t\t\t\tname: tc.function.name,\n\t\t\t\t\t\targuments: tc.function.arguments,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t});\n\t}\n\n\tappendToolResult(\n\t\tmessages: CCMessageParam[],\n\t\tresult: ToolResultMessage,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"tool\",\n\t\t\ttool_call_id: result.toolCallId,\n\t\t\tcontent: result.content,\n\t\t});\n\t}\n\n\tasync fetch(\n\t\tmessages: CCMessageParam[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tconst response = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\n\t\treturn {\n\t\t\tcontent: response.choices[0].message.content || undefined,\n\t\t};\n\t}\n\n\tasync fetchWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tif (functions.length > 0) {\n\t\t\tconst response = await this.client.chat.completions.create({\n\t\t\t\tmodel: this.modelName,\n\t\t\t\tmessages,\n\t\t\t\ttools: functions,\n\t\t\t\ttool_choice: options?.toolChoice ?? \"auto\",\n\t\t\t\treasoning_effort: options?.reasoning,\n\t\t\t\tverbosity: options?.verbosity,\n\t\t\t});\n\n\t\t\tconst { content, tool_calls } = response.choices[0].message;\n\n\t\t\tconst toolCalls: ToolCall[] | undefined = tool_calls?.map(\n\t\t\t\t(value: ChatCompletionMessageToolCall) => {\n\t\t\t\t\tconst v = value as ChatCompletionMessageFunctionToolCall;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: v.function.name,\n\t\t\t\t\t\t// FIXME: value.function.arguments could not be a valid JSON\n\t\t\t\t\t\targuments: JSON.parse(v.function.arguments),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontent: content || undefined,\n\t\t\t\ttoolCalls,\n\t\t\t};\n\t\t}\n\t\treturn await this.fetch(messages);\n\t}\n\n\tasync fetchStreamWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<LLMStream> {\n\t\tconst stream = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\ttools: functions,\n\t\t\ttool_choice:\n\t\t\t\tfunctions.length > 0 ? (options?.toolChoice ?? \"auto\") : \"none\",\n\t\t\tstream: true,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\t\treturn this.createOpenAIStreamAdapter(stream);\n\t}\n\n\t// NOTE(yoojin): Need to switch API Stream type to LLMStream.\n\tprivate createOpenAIStreamAdapter(\n\t\topenaiStream: AsyncIterable<ChatCompletionChunk>,\n\t): LLMStream {\n\t\treturn {\n\t\t\tasync *[Symbol.asyncIterator](): AsyncIterator<StreamChunk> {\n\t\t\t\tfor await (const openaiChunk of openaiStream) {\n\t\t\t\t\tconst choice = openaiChunk.choices[0];\n\t\t\t\t\tif (choice) {\n\t\t\t\t\t\tconst streamChunk: StreamChunk = {\n\t\t\t\t\t\t\tdelta: {\n\t\t\t\t\t\t\t\trole: choice.delta?.role || undefined,\n\t\t\t\t\t\t\t\tcontent: choice.delta?.content || undefined,\n\t\t\t\t\t\t\t\ttool_calls: choice.delta?.tool_calls?.map(\n\t\t\t\t\t\t\t\t\t(tc) =>\n\t\t\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\t\t\tindex: tc.index,\n\t\t\t\t\t\t\t\t\t\t\tid: tc.id,\n\t\t\t\t\t\t\t\t\t\t\ttype: tc.type,\n\t\t\t\t\t\t\t\t\t\t\tfunction: tc.function,\n\t\t\t\t\t\t\t\t\t\t}) as ToolCallDelta,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfinish_reason: choice.finish_reason as any,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tprovider: \"openai\",\n\t\t\t\t\t\t\t\tmodel: openaiChunk.model,\n\t\t\t\t\t\t\t\tid: openaiChunk.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tyield streamChunk;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tmetadata: { provider: \"openai\" },\n\t\t};\n\t}\n\n\tconvertToolsToFunctions(tools: ConnectorTool[]): ChatCompletionTool[] {\n\t\tconst functions: ChatCompletionTool[] = [];\n\t\tfor (const tool of tools) {\n\t\t\tfunctions.push({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.toolName,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.inputSchema,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn functions;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKO;AAMP,oBAIO;AAMP,oBAAiD;AAkB1C,IAAM,cAAN,cAA0B,yBAA8C;AAAA,EACtE;AAAA,EACA;AAAA,EAER,YAAY;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAAsB;AACrB,UAAM;AACN,UAAM,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACV;AACA,SAAK,SAAS,IAAI,cAAAA,YAAkB,OAAO;AAC3C,SAAK,YAAY;AAAA,EAClB;AAAA,EAEQ,eAAe,MAAmB;AACzC,YAAQ,MAAM;AAAA,MACb,KAAK,0BAAY;AAChB,eAAO;AAAA,MACR,KAAK,0BAAY;AAAA,MACjB,KAAK,0BAAY;AAChB,eAAO;AAAA,MACR;AACC,eAAO;AAAA,IACT;AAAA,EACD;AAAA,EAEA,iBAAiB,QAII;AACpB,UAAM,EAAE,OAAO,QAAQ,aAAa,IAAI;AACxC,UAAM,WAA6B,CAAC,eACjC,CAAC,IACD,CAAC,EAAE,MAAM,UAAU,SAAS,aAAa,KAAK,EAAE,CAAC;AACpD,UAAM,iBAAmC,CAAC,SACvC,CAAC,IACD,OAAO,SAAS,IAAI,CAAC,YAA2B;AAChD,aAAO;AAAA,QACN,MAAM,KAAK,eAAe,QAAQ,IAAI;AAAA,QACtC,SAAS,QAAQ,QAAQ,MAAM,CAAC;AAAA,MACjC;AAAA,IACD,CAAC;AACH,UAAM,cAA8B,EAAE,MAAM,QAAQ,SAAS,MAAM;AACnE,WAAO,SAAS,OAAO,cAAc,EAAE,OAAO,WAAW;AAAA,EAC1D;AAAA,EAEA,4BACC,UACA,MACO;AACP,aAAS,KAAK;AAAA,MACb,MAAM;AAAA,MACN,SAAS,KAAK;AAAA,MACd,YAAY,KAAK,UAAU;AAAA,QAC1B,CAAC,QAA+C;AAAA,UAC/C,IAAI,GAAG;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,YACT,MAAM,GAAG,SAAS;AAAA,YAClB,WAAW,GAAG,SAAS;AAAA,UACxB;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,iBACC,UACA,QACO;AACP,aAAS,KAAK;AAAA,MACb,MAAM;AAAA,MACN,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,IACjB,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,MACL,UACA,SACyB;AACzB,UAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,MAC1D,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,kBAAkB,SAAS;AAAA,MAC3B,WAAW,SAAS;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACN,SAAS,SAAS,QAAQ,CAAC,EAAE,QAAQ,WAAW;AAAA,IACjD;AAAA,EACD;AAAA,EAEA,MAAM,wBACL,UACA,WACA,SACyB;AACzB,QAAI,UAAU,SAAS,GAAG;AACzB,YAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,QAC1D,OAAO,KAAK;AAAA,QACZ;AAAA,QACA,OAAO;AAAA,QACP,aAAa,SAAS,cAAc;AAAA,QACpC,kBAAkB,SAAS;AAAA,QAC3B,WAAW,SAAS;AAAA,MACrB,CAAC;AAED,YAAM,EAAE,SAAS,WAAW,IAAI,SAAS,QAAQ,CAAC,EAAE;AAEpD,YAAM,YAAoC,YAAY;AAAA,QACrD,CAAC,UAAyC;AACzC,gBAAM,IAAI;AACV,iBAAO;AAAA,YACN,MAAM,EAAE,SAAS;AAAA;AAAA,YAEjB,WAAW,KAAK,MAAM,EAAE,SAAS,SAAS;AAAA,UAC3C;AAAA,QACD;AAAA,MACD;AAEA,aAAO;AAAA,QACN,SAAS,WAAW;AAAA,QACpB;AAAA,MACD;AAAA,IACD;AACA,WAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,EACjC;AAAA,EAEA,MAAM,8BACL,UACA,WACA,SACqB;AACrB,UAAM,SAAS,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,MACxD,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,aACC,UAAU,SAAS,IAAK,SAAS,cAAc,SAAU;AAAA,MAC1D,QAAQ;AAAA,MACR,kBAAkB,SAAS;AAAA,MAC3B,WAAW,SAAS;AAAA,IACrB,CAAC;AACD,WAAO,KAAK,0BAA0B,MAAM;AAAA,EAC7C;AAAA;AAAA,EAGQ,0BACP,cACY;AACZ,WAAO;AAAA,MACN,QAAQ,OAAO,aAAa,IAAgC;AAC3D,yBAAiB,eAAe,cAAc;AAC7C,gBAAM,SAAS,YAAY,QAAQ,CAAC;AACpC,cAAI,QAAQ;AACX,kBAAM,cAA2B;AAAA,cAChC,OAAO;AAAA,gBACN,MAAM,OAAO,OAAO,QAAQ;AAAA,gBAC5B,SAAS,OAAO,OAAO,WAAW;AAAA,gBAClC,YAAY,OAAO,OAAO,YAAY;AAAA,kBACrC,CAAC,QACC;AAAA,oBACA,OAAO,GAAG;AAAA,oBACV,IAAI,GAAG;AAAA,oBACP,MAAM,GAAG;AAAA,oBACT,UAAU,GAAG;AAAA,kBACd;AAAA,gBACF;AAAA,cACD;AAAA,cACA,eAAe,OAAO;AAAA,cACtB,UAAU;AAAA,gBACT,UAAU;AAAA,gBACV,OAAO,YAAY;AAAA,gBACnB,IAAI,YAAY;AAAA,cACjB;AAAA,YACD;AACA,kBAAM;AAAA,UACP;AAAA,QACD;AAAA,MACD;AAAA,MACA,UAAU,EAAE,UAAU,SAAS;AAAA,IAChC;AAAA,EACD;AAAA,EAEA,wBAAwB,OAA8C;AACrE,UAAM,YAAkC,CAAC;AACzC,eAAW,QAAQ,OAAO;AACzB,gBAAU,KAAK;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,UACT,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QAClB;AAAA,MACD,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AACD;","names":["AzureOpenAIClient"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n\ttype AssistantToolCallTurn,\n\tBaseModel,\n\ttype ModelFetchOptions,\n\ttype ToolResultMessage,\n} from \"@ainetwork/adk/modules\";\nimport type {\n\tConnectorTool,\n\tFetchResponse,\n\tToolCall,\n} from \"@ainetwork/adk/types/connector\";\nimport {\n\ttype MessageObject,\n\tMessageRole,\n\ttype ThreadObject,\n} from \"@ainetwork/adk/types/memory\";\nimport type {\n\tLLMStream,\n\tStreamChunk,\n\tToolCallDelta,\n} from \"@ainetwork/adk/types/stream\";\nimport { AzureOpenAI as AzureOpenAIClient } from \"openai\";\nimport type {\n\tChatCompletionMessageParam as CCMessageParam,\n\tChatCompletionChunk,\n\tChatCompletionMessageFunctionToolCall,\n\tChatCompletionMessageToolCall,\n\tChatCompletionTool,\n} from \"openai/resources\";\n\nexport interface AzureOpenAIConfig {\n\tendpoint?: string;\n\tdeployment?: string;\n\tbaseUrl?: string;\n\tapiKey: string;\n\tapiVersion: string;\n\tmodelName: string;\n}\n\nexport class AzureOpenAI extends BaseModel<CCMessageParam, ChatCompletionTool> {\n\tprivate client: AzureOpenAIClient;\n\tprivate modelName: string;\n\n\tconstructor({\n\t\tendpoint,\n\t\tdeployment,\n\t\tbaseUrl,\n\t\tapiKey,\n\t\tapiVersion,\n\t\tmodelName,\n\t}: AzureOpenAIConfig) {\n\t\tsuper();\n\t\tconst options = {\n\t\t\tendpoint,\n\t\t\tapiKey,\n\t\t\tdeployment,\n\t\t\tapiVersion,\n\t\t\tbaseURL: baseUrl,\n\t\t};\n\t\tthis.client = new AzureOpenAIClient(options);\n\t\tthis.modelName = modelName;\n\t}\n\n\tprivate getMessageRole(role: MessageRole) {\n\t\tswitch (role) {\n\t\t\tcase MessageRole.USER:\n\t\t\t\treturn \"user\";\n\t\t\tcase MessageRole.MODEL:\n\t\t\tcase MessageRole.SYSTEM:\n\t\t\t\treturn \"system\";\n\t\t\tdefault:\n\t\t\t\treturn \"system\"; /*FIXME*/\n\t\t}\n\t}\n\n\tgenerateMessages(params: {\n\t\tquery: string;\n\t\tthread?: ThreadObject;\n\t\tsystemPrompt?: string;\n\t}): CCMessageParam[] {\n\t\tconst { query, thread, systemPrompt } = params;\n\t\tconst messages: CCMessageParam[] = !systemPrompt\n\t\t\t? []\n\t\t\t: [{ role: \"system\", content: systemPrompt.trim() }];\n\t\tconst sessionContent: CCMessageParam[] = !thread\n\t\t\t? []\n\t\t\t: thread.messages.map((message: MessageObject) => {\n\t\t\t\t\t// Prefer the real query stashed in metadata when a display text was\n\t\t\t\t\t// shown in its place (displayQuery), so multi-turn history carries\n\t\t\t\t\t// the actual query the model saw on the first turn — not the short\n\t\t\t\t\t// label. Falls back to the stored content otherwise.\n\t\t\t\t\tconst content =\n\t\t\t\t\t\ttypeof message.metadata?.query === \"string\"\n\t\t\t\t\t\t\t? message.metadata.query\n\t\t\t\t\t\t\t: (message.content.parts[0] as string);\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: this.getMessageRole(message.role),\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\tconst userContent: CCMessageParam = { role: \"user\", content: query };\n\t\treturn messages.concat(sessionContent).concat(userContent);\n\t}\n\n\tappendAssistantToolCallTurn(\n\t\tmessages: CCMessageParam[],\n\t\tturn: AssistantToolCallTurn,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: turn.content,\n\t\t\ttool_calls: turn.toolCalls.map(\n\t\t\t\t(tc): ChatCompletionMessageFunctionToolCall => ({\n\t\t\t\t\tid: tc.id,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: {\n\t\t\t\t\t\tname: tc.function.name,\n\t\t\t\t\t\targuments: tc.function.arguments,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t});\n\t}\n\n\tappendToolResult(\n\t\tmessages: CCMessageParam[],\n\t\tresult: ToolResultMessage,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"tool\",\n\t\t\ttool_call_id: result.toolCallId,\n\t\t\tcontent: result.content,\n\t\t});\n\t}\n\n\tasync fetch(\n\t\tmessages: CCMessageParam[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tconst response = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\n\t\treturn {\n\t\t\tcontent: response.choices[0].message.content || undefined,\n\t\t};\n\t}\n\n\tasync fetchWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tif (functions.length > 0) {\n\t\t\tconst response = await this.client.chat.completions.create({\n\t\t\t\tmodel: this.modelName,\n\t\t\t\tmessages,\n\t\t\t\ttools: functions,\n\t\t\t\ttool_choice: options?.toolChoice ?? \"auto\",\n\t\t\t\treasoning_effort: options?.reasoning,\n\t\t\t\tverbosity: options?.verbosity,\n\t\t\t});\n\n\t\t\tconst { content, tool_calls } = response.choices[0].message;\n\n\t\t\tconst toolCalls: ToolCall[] | undefined = tool_calls?.map(\n\t\t\t\t(value: ChatCompletionMessageToolCall) => {\n\t\t\t\t\tconst v = value as ChatCompletionMessageFunctionToolCall;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: v.function.name,\n\t\t\t\t\t\t// FIXME: value.function.arguments could not be a valid JSON\n\t\t\t\t\t\targuments: JSON.parse(v.function.arguments),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontent: content || undefined,\n\t\t\t\ttoolCalls,\n\t\t\t};\n\t\t}\n\t\treturn await this.fetch(messages);\n\t}\n\n\tasync fetchStreamWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<LLMStream> {\n\t\tconst stream = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\ttools: functions,\n\t\t\ttool_choice:\n\t\t\t\tfunctions.length > 0 ? (options?.toolChoice ?? \"auto\") : \"none\",\n\t\t\tstream: true,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\t\treturn this.createOpenAIStreamAdapter(stream);\n\t}\n\n\t// NOTE(yoojin): Need to switch API Stream type to LLMStream.\n\tprivate createOpenAIStreamAdapter(\n\t\topenaiStream: AsyncIterable<ChatCompletionChunk>,\n\t): LLMStream {\n\t\treturn {\n\t\t\tasync *[Symbol.asyncIterator](): AsyncIterator<StreamChunk> {\n\t\t\t\tfor await (const openaiChunk of openaiStream) {\n\t\t\t\t\tconst choice = openaiChunk.choices[0];\n\t\t\t\t\tif (choice) {\n\t\t\t\t\t\tconst streamChunk: StreamChunk = {\n\t\t\t\t\t\t\tdelta: {\n\t\t\t\t\t\t\t\trole: choice.delta?.role || undefined,\n\t\t\t\t\t\t\t\tcontent: choice.delta?.content || undefined,\n\t\t\t\t\t\t\t\ttool_calls: choice.delta?.tool_calls?.map(\n\t\t\t\t\t\t\t\t\t(tc) =>\n\t\t\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\t\t\tindex: tc.index,\n\t\t\t\t\t\t\t\t\t\t\tid: tc.id,\n\t\t\t\t\t\t\t\t\t\t\ttype: tc.type,\n\t\t\t\t\t\t\t\t\t\t\tfunction: tc.function,\n\t\t\t\t\t\t\t\t\t\t}) as ToolCallDelta,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfinish_reason: choice.finish_reason as any,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tprovider: \"openai\",\n\t\t\t\t\t\t\t\tmodel: openaiChunk.model,\n\t\t\t\t\t\t\t\tid: openaiChunk.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tyield streamChunk;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tmetadata: { provider: \"openai\" },\n\t\t};\n\t}\n\n\tconvertToolsToFunctions(tools: ConnectorTool[]): ChatCompletionTool[] {\n\t\tconst functions: ChatCompletionTool[] = [];\n\t\tfor (const tool of tools) {\n\t\t\tfunctions.push({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.toolName,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.inputSchema,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn functions;\n\t}\n}\n"],"mappings":"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","names":["AzureOpenAIClient"]}
|
package/dist/index.js
CHANGED
|
@@ -43,9 +43,10 @@ var AzureOpenAI = class extends BaseModel {
|
|
|
43
43
|
const { query, thread, systemPrompt } = params;
|
|
44
44
|
const messages = !systemPrompt ? [] : [{ role: "system", content: systemPrompt.trim() }];
|
|
45
45
|
const sessionContent = !thread ? [] : thread.messages.map((message) => {
|
|
46
|
+
const content = typeof message.metadata?.query === "string" ? message.metadata.query : message.content.parts[0];
|
|
46
47
|
return {
|
|
47
48
|
role: this.getMessageRole(message.role),
|
|
48
|
-
content
|
|
49
|
+
content
|
|
49
50
|
};
|
|
50
51
|
});
|
|
51
52
|
const userContent = { role: "user", content: query };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n\ttype AssistantToolCallTurn,\n\tBaseModel,\n\ttype ModelFetchOptions,\n\ttype ToolResultMessage,\n} from \"@ainetwork/adk/modules\";\nimport type {\n\tConnectorTool,\n\tFetchResponse,\n\tToolCall,\n} from \"@ainetwork/adk/types/connector\";\nimport {\n\ttype MessageObject,\n\tMessageRole,\n\ttype ThreadObject,\n} from \"@ainetwork/adk/types/memory\";\nimport type {\n\tLLMStream,\n\tStreamChunk,\n\tToolCallDelta,\n} from \"@ainetwork/adk/types/stream\";\nimport { AzureOpenAI as AzureOpenAIClient } from \"openai\";\nimport type {\n\tChatCompletionMessageParam as CCMessageParam,\n\tChatCompletionChunk,\n\tChatCompletionMessageFunctionToolCall,\n\tChatCompletionMessageToolCall,\n\tChatCompletionTool,\n} from \"openai/resources\";\n\nexport interface AzureOpenAIConfig {\n\tendpoint?: string;\n\tdeployment?: string;\n\tbaseUrl?: string;\n\tapiKey: string;\n\tapiVersion: string;\n\tmodelName: string;\n}\n\nexport class AzureOpenAI extends BaseModel<CCMessageParam, ChatCompletionTool> {\n\tprivate client: AzureOpenAIClient;\n\tprivate modelName: string;\n\n\tconstructor({\n\t\tendpoint,\n\t\tdeployment,\n\t\tbaseUrl,\n\t\tapiKey,\n\t\tapiVersion,\n\t\tmodelName,\n\t}: AzureOpenAIConfig) {\n\t\tsuper();\n\t\tconst options = {\n\t\t\tendpoint,\n\t\t\tapiKey,\n\t\t\tdeployment,\n\t\t\tapiVersion,\n\t\t\tbaseURL: baseUrl,\n\t\t};\n\t\tthis.client = new AzureOpenAIClient(options);\n\t\tthis.modelName = modelName;\n\t}\n\n\tprivate getMessageRole(role: MessageRole) {\n\t\tswitch (role) {\n\t\t\tcase MessageRole.USER:\n\t\t\t\treturn \"user\";\n\t\t\tcase MessageRole.MODEL:\n\t\t\tcase MessageRole.SYSTEM:\n\t\t\t\treturn \"system\";\n\t\t\tdefault:\n\t\t\t\treturn \"system\"; /*FIXME*/\n\t\t}\n\t}\n\n\tgenerateMessages(params: {\n\t\tquery: string;\n\t\tthread?: ThreadObject;\n\t\tsystemPrompt?: string;\n\t}): CCMessageParam[] {\n\t\tconst { query, thread, systemPrompt } = params;\n\t\tconst messages: CCMessageParam[] = !systemPrompt\n\t\t\t? []\n\t\t\t: [{ role: \"system\", content: systemPrompt.trim() }];\n\t\tconst sessionContent: CCMessageParam[] = !thread\n\t\t\t? []\n\t\t\t: thread.messages.map((message: MessageObject) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: this.getMessageRole(message.role),\n\t\t\t\t\t\tcontent: message.content.parts[0] as string,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\tconst userContent: CCMessageParam = { role: \"user\", content: query };\n\t\treturn messages.concat(sessionContent).concat(userContent);\n\t}\n\n\tappendAssistantToolCallTurn(\n\t\tmessages: CCMessageParam[],\n\t\tturn: AssistantToolCallTurn,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: turn.content,\n\t\t\ttool_calls: turn.toolCalls.map(\n\t\t\t\t(tc): ChatCompletionMessageFunctionToolCall => ({\n\t\t\t\t\tid: tc.id,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: {\n\t\t\t\t\t\tname: tc.function.name,\n\t\t\t\t\t\targuments: tc.function.arguments,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t});\n\t}\n\n\tappendToolResult(\n\t\tmessages: CCMessageParam[],\n\t\tresult: ToolResultMessage,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"tool\",\n\t\t\ttool_call_id: result.toolCallId,\n\t\t\tcontent: result.content,\n\t\t});\n\t}\n\n\tasync fetch(\n\t\tmessages: CCMessageParam[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tconst response = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\n\t\treturn {\n\t\t\tcontent: response.choices[0].message.content || undefined,\n\t\t};\n\t}\n\n\tasync fetchWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tif (functions.length > 0) {\n\t\t\tconst response = await this.client.chat.completions.create({\n\t\t\t\tmodel: this.modelName,\n\t\t\t\tmessages,\n\t\t\t\ttools: functions,\n\t\t\t\ttool_choice: options?.toolChoice ?? \"auto\",\n\t\t\t\treasoning_effort: options?.reasoning,\n\t\t\t\tverbosity: options?.verbosity,\n\t\t\t});\n\n\t\t\tconst { content, tool_calls } = response.choices[0].message;\n\n\t\t\tconst toolCalls: ToolCall[] | undefined = tool_calls?.map(\n\t\t\t\t(value: ChatCompletionMessageToolCall) => {\n\t\t\t\t\tconst v = value as ChatCompletionMessageFunctionToolCall;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: v.function.name,\n\t\t\t\t\t\t// FIXME: value.function.arguments could not be a valid JSON\n\t\t\t\t\t\targuments: JSON.parse(v.function.arguments),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontent: content || undefined,\n\t\t\t\ttoolCalls,\n\t\t\t};\n\t\t}\n\t\treturn await this.fetch(messages);\n\t}\n\n\tasync fetchStreamWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<LLMStream> {\n\t\tconst stream = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\ttools: functions,\n\t\t\ttool_choice:\n\t\t\t\tfunctions.length > 0 ? (options?.toolChoice ?? \"auto\") : \"none\",\n\t\t\tstream: true,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\t\treturn this.createOpenAIStreamAdapter(stream);\n\t}\n\n\t// NOTE(yoojin): Need to switch API Stream type to LLMStream.\n\tprivate createOpenAIStreamAdapter(\n\t\topenaiStream: AsyncIterable<ChatCompletionChunk>,\n\t): LLMStream {\n\t\treturn {\n\t\t\tasync *[Symbol.asyncIterator](): AsyncIterator<StreamChunk> {\n\t\t\t\tfor await (const openaiChunk of openaiStream) {\n\t\t\t\t\tconst choice = openaiChunk.choices[0];\n\t\t\t\t\tif (choice) {\n\t\t\t\t\t\tconst streamChunk: StreamChunk = {\n\t\t\t\t\t\t\tdelta: {\n\t\t\t\t\t\t\t\trole: choice.delta?.role || undefined,\n\t\t\t\t\t\t\t\tcontent: choice.delta?.content || undefined,\n\t\t\t\t\t\t\t\ttool_calls: choice.delta?.tool_calls?.map(\n\t\t\t\t\t\t\t\t\t(tc) =>\n\t\t\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\t\t\tindex: tc.index,\n\t\t\t\t\t\t\t\t\t\t\tid: tc.id,\n\t\t\t\t\t\t\t\t\t\t\ttype: tc.type,\n\t\t\t\t\t\t\t\t\t\t\tfunction: tc.function,\n\t\t\t\t\t\t\t\t\t\t}) as ToolCallDelta,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfinish_reason: choice.finish_reason as any,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tprovider: \"openai\",\n\t\t\t\t\t\t\t\tmodel: openaiChunk.model,\n\t\t\t\t\t\t\t\tid: openaiChunk.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tyield streamChunk;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tmetadata: { provider: \"openai\" },\n\t\t};\n\t}\n\n\tconvertToolsToFunctions(tools: ConnectorTool[]): ChatCompletionTool[] {\n\t\tconst functions: ChatCompletionTool[] = [];\n\t\tfor (const tool of tools) {\n\t\t\tfunctions.push({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.toolName,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.inputSchema,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn functions;\n\t}\n}\n"],"mappings":";AAAA;AAAA,EAEC;AAAA,OAGM;AAMP;AAAA,EAEC;AAAA,OAEM;AAMP,SAAS,eAAe,yBAAyB;AAkB1C,IAAM,cAAN,cAA0B,UAA8C;AAAA,EACtE;AAAA,EACA;AAAA,EAER,YAAY;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAAsB;AACrB,UAAM;AACN,UAAM,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACV;AACA,SAAK,SAAS,IAAI,kBAAkB,OAAO;AAC3C,SAAK,YAAY;AAAA,EAClB;AAAA,EAEQ,eAAe,MAAmB;AACzC,YAAQ,MAAM;AAAA,MACb,KAAK,YAAY;AAChB,eAAO;AAAA,MACR,KAAK,YAAY;AAAA,MACjB,KAAK,YAAY;AAChB,eAAO;AAAA,MACR;AACC,eAAO;AAAA,IACT;AAAA,EACD;AAAA,EAEA,iBAAiB,QAII;AACpB,UAAM,EAAE,OAAO,QAAQ,aAAa,IAAI;AACxC,UAAM,WAA6B,CAAC,eACjC,CAAC,IACD,CAAC,EAAE,MAAM,UAAU,SAAS,aAAa,KAAK,EAAE,CAAC;AACpD,UAAM,iBAAmC,CAAC,SACvC,CAAC,IACD,OAAO,SAAS,IAAI,CAAC,YAA2B;AAChD,aAAO;AAAA,QACN,MAAM,KAAK,eAAe,QAAQ,IAAI;AAAA,QACtC,SAAS,QAAQ,QAAQ,MAAM,CAAC;AAAA,MACjC;AAAA,IACD,CAAC;AACH,UAAM,cAA8B,EAAE,MAAM,QAAQ,SAAS,MAAM;AACnE,WAAO,SAAS,OAAO,cAAc,EAAE,OAAO,WAAW;AAAA,EAC1D;AAAA,EAEA,4BACC,UACA,MACO;AACP,aAAS,KAAK;AAAA,MACb,MAAM;AAAA,MACN,SAAS,KAAK;AAAA,MACd,YAAY,KAAK,UAAU;AAAA,QAC1B,CAAC,QAA+C;AAAA,UAC/C,IAAI,GAAG;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,YACT,MAAM,GAAG,SAAS;AAAA,YAClB,WAAW,GAAG,SAAS;AAAA,UACxB;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,iBACC,UACA,QACO;AACP,aAAS,KAAK;AAAA,MACb,MAAM;AAAA,MACN,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,IACjB,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,MACL,UACA,SACyB;AACzB,UAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,MAC1D,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,kBAAkB,SAAS;AAAA,MAC3B,WAAW,SAAS;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACN,SAAS,SAAS,QAAQ,CAAC,EAAE,QAAQ,WAAW;AAAA,IACjD;AAAA,EACD;AAAA,EAEA,MAAM,wBACL,UACA,WACA,SACyB;AACzB,QAAI,UAAU,SAAS,GAAG;AACzB,YAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,QAC1D,OAAO,KAAK;AAAA,QACZ;AAAA,QACA,OAAO;AAAA,QACP,aAAa,SAAS,cAAc;AAAA,QACpC,kBAAkB,SAAS;AAAA,QAC3B,WAAW,SAAS;AAAA,MACrB,CAAC;AAED,YAAM,EAAE,SAAS,WAAW,IAAI,SAAS,QAAQ,CAAC,EAAE;AAEpD,YAAM,YAAoC,YAAY;AAAA,QACrD,CAAC,UAAyC;AACzC,gBAAM,IAAI;AACV,iBAAO;AAAA,YACN,MAAM,EAAE,SAAS;AAAA;AAAA,YAEjB,WAAW,KAAK,MAAM,EAAE,SAAS,SAAS;AAAA,UAC3C;AAAA,QACD;AAAA,MACD;AAEA,aAAO;AAAA,QACN,SAAS,WAAW;AAAA,QACpB;AAAA,MACD;AAAA,IACD;AACA,WAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,EACjC;AAAA,EAEA,MAAM,8BACL,UACA,WACA,SACqB;AACrB,UAAM,SAAS,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,MACxD,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,aACC,UAAU,SAAS,IAAK,SAAS,cAAc,SAAU;AAAA,MAC1D,QAAQ;AAAA,MACR,kBAAkB,SAAS;AAAA,MAC3B,WAAW,SAAS;AAAA,IACrB,CAAC;AACD,WAAO,KAAK,0BAA0B,MAAM;AAAA,EAC7C;AAAA;AAAA,EAGQ,0BACP,cACY;AACZ,WAAO;AAAA,MACN,QAAQ,OAAO,aAAa,IAAgC;AAC3D,yBAAiB,eAAe,cAAc;AAC7C,gBAAM,SAAS,YAAY,QAAQ,CAAC;AACpC,cAAI,QAAQ;AACX,kBAAM,cAA2B;AAAA,cAChC,OAAO;AAAA,gBACN,MAAM,OAAO,OAAO,QAAQ;AAAA,gBAC5B,SAAS,OAAO,OAAO,WAAW;AAAA,gBAClC,YAAY,OAAO,OAAO,YAAY;AAAA,kBACrC,CAAC,QACC;AAAA,oBACA,OAAO,GAAG;AAAA,oBACV,IAAI,GAAG;AAAA,oBACP,MAAM,GAAG;AAAA,oBACT,UAAU,GAAG;AAAA,kBACd;AAAA,gBACF;AAAA,cACD;AAAA,cACA,eAAe,OAAO;AAAA,cACtB,UAAU;AAAA,gBACT,UAAU;AAAA,gBACV,OAAO,YAAY;AAAA,gBACnB,IAAI,YAAY;AAAA,cACjB;AAAA,YACD;AACA,kBAAM;AAAA,UACP;AAAA,QACD;AAAA,MACD;AAAA,MACA,UAAU,EAAE,UAAU,SAAS;AAAA,IAChC;AAAA,EACD;AAAA,EAEA,wBAAwB,OAA8C;AACrE,UAAM,YAAkC,CAAC;AACzC,eAAW,QAAQ,OAAO;AACzB,gBAAU,KAAK;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,UACT,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QAClB;AAAA,MACD,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AACD;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n\ttype AssistantToolCallTurn,\n\tBaseModel,\n\ttype ModelFetchOptions,\n\ttype ToolResultMessage,\n} from \"@ainetwork/adk/modules\";\nimport type {\n\tConnectorTool,\n\tFetchResponse,\n\tToolCall,\n} from \"@ainetwork/adk/types/connector\";\nimport {\n\ttype MessageObject,\n\tMessageRole,\n\ttype ThreadObject,\n} from \"@ainetwork/adk/types/memory\";\nimport type {\n\tLLMStream,\n\tStreamChunk,\n\tToolCallDelta,\n} from \"@ainetwork/adk/types/stream\";\nimport { AzureOpenAI as AzureOpenAIClient } from \"openai\";\nimport type {\n\tChatCompletionMessageParam as CCMessageParam,\n\tChatCompletionChunk,\n\tChatCompletionMessageFunctionToolCall,\n\tChatCompletionMessageToolCall,\n\tChatCompletionTool,\n} from \"openai/resources\";\n\nexport interface AzureOpenAIConfig {\n\tendpoint?: string;\n\tdeployment?: string;\n\tbaseUrl?: string;\n\tapiKey: string;\n\tapiVersion: string;\n\tmodelName: string;\n}\n\nexport class AzureOpenAI extends BaseModel<CCMessageParam, ChatCompletionTool> {\n\tprivate client: AzureOpenAIClient;\n\tprivate modelName: string;\n\n\tconstructor({\n\t\tendpoint,\n\t\tdeployment,\n\t\tbaseUrl,\n\t\tapiKey,\n\t\tapiVersion,\n\t\tmodelName,\n\t}: AzureOpenAIConfig) {\n\t\tsuper();\n\t\tconst options = {\n\t\t\tendpoint,\n\t\t\tapiKey,\n\t\t\tdeployment,\n\t\t\tapiVersion,\n\t\t\tbaseURL: baseUrl,\n\t\t};\n\t\tthis.client = new AzureOpenAIClient(options);\n\t\tthis.modelName = modelName;\n\t}\n\n\tprivate getMessageRole(role: MessageRole) {\n\t\tswitch (role) {\n\t\t\tcase MessageRole.USER:\n\t\t\t\treturn \"user\";\n\t\t\tcase MessageRole.MODEL:\n\t\t\tcase MessageRole.SYSTEM:\n\t\t\t\treturn \"system\";\n\t\t\tdefault:\n\t\t\t\treturn \"system\"; /*FIXME*/\n\t\t}\n\t}\n\n\tgenerateMessages(params: {\n\t\tquery: string;\n\t\tthread?: ThreadObject;\n\t\tsystemPrompt?: string;\n\t}): CCMessageParam[] {\n\t\tconst { query, thread, systemPrompt } = params;\n\t\tconst messages: CCMessageParam[] = !systemPrompt\n\t\t\t? []\n\t\t\t: [{ role: \"system\", content: systemPrompt.trim() }];\n\t\tconst sessionContent: CCMessageParam[] = !thread\n\t\t\t? []\n\t\t\t: thread.messages.map((message: MessageObject) => {\n\t\t\t\t\t// Prefer the real query stashed in metadata when a display text was\n\t\t\t\t\t// shown in its place (displayQuery), so multi-turn history carries\n\t\t\t\t\t// the actual query the model saw on the first turn — not the short\n\t\t\t\t\t// label. Falls back to the stored content otherwise.\n\t\t\t\t\tconst content =\n\t\t\t\t\t\ttypeof message.metadata?.query === \"string\"\n\t\t\t\t\t\t\t? message.metadata.query\n\t\t\t\t\t\t\t: (message.content.parts[0] as string);\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: this.getMessageRole(message.role),\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\tconst userContent: CCMessageParam = { role: \"user\", content: query };\n\t\treturn messages.concat(sessionContent).concat(userContent);\n\t}\n\n\tappendAssistantToolCallTurn(\n\t\tmessages: CCMessageParam[],\n\t\tturn: AssistantToolCallTurn,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: turn.content,\n\t\t\ttool_calls: turn.toolCalls.map(\n\t\t\t\t(tc): ChatCompletionMessageFunctionToolCall => ({\n\t\t\t\t\tid: tc.id,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: {\n\t\t\t\t\t\tname: tc.function.name,\n\t\t\t\t\t\targuments: tc.function.arguments,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t});\n\t}\n\n\tappendToolResult(\n\t\tmessages: CCMessageParam[],\n\t\tresult: ToolResultMessage,\n\t): void {\n\t\tmessages.push({\n\t\t\trole: \"tool\",\n\t\t\ttool_call_id: result.toolCallId,\n\t\t\tcontent: result.content,\n\t\t});\n\t}\n\n\tasync fetch(\n\t\tmessages: CCMessageParam[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tconst response = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\n\t\treturn {\n\t\t\tcontent: response.choices[0].message.content || undefined,\n\t\t};\n\t}\n\n\tasync fetchWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<FetchResponse> {\n\t\tif (functions.length > 0) {\n\t\t\tconst response = await this.client.chat.completions.create({\n\t\t\t\tmodel: this.modelName,\n\t\t\t\tmessages,\n\t\t\t\ttools: functions,\n\t\t\t\ttool_choice: options?.toolChoice ?? \"auto\",\n\t\t\t\treasoning_effort: options?.reasoning,\n\t\t\t\tverbosity: options?.verbosity,\n\t\t\t});\n\n\t\t\tconst { content, tool_calls } = response.choices[0].message;\n\n\t\t\tconst toolCalls: ToolCall[] | undefined = tool_calls?.map(\n\t\t\t\t(value: ChatCompletionMessageToolCall) => {\n\t\t\t\t\tconst v = value as ChatCompletionMessageFunctionToolCall;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: v.function.name,\n\t\t\t\t\t\t// FIXME: value.function.arguments could not be a valid JSON\n\t\t\t\t\t\targuments: JSON.parse(v.function.arguments),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontent: content || undefined,\n\t\t\t\ttoolCalls,\n\t\t\t};\n\t\t}\n\t\treturn await this.fetch(messages);\n\t}\n\n\tasync fetchStreamWithContextMessage(\n\t\tmessages: CCMessageParam[],\n\t\tfunctions: ChatCompletionTool[],\n\t\toptions?: ModelFetchOptions,\n\t): Promise<LLMStream> {\n\t\tconst stream = await this.client.chat.completions.create({\n\t\t\tmodel: this.modelName,\n\t\t\tmessages,\n\t\t\ttools: functions,\n\t\t\ttool_choice:\n\t\t\t\tfunctions.length > 0 ? (options?.toolChoice ?? \"auto\") : \"none\",\n\t\t\tstream: true,\n\t\t\treasoning_effort: options?.reasoning,\n\t\t\tverbosity: options?.verbosity,\n\t\t});\n\t\treturn this.createOpenAIStreamAdapter(stream);\n\t}\n\n\t// NOTE(yoojin): Need to switch API Stream type to LLMStream.\n\tprivate createOpenAIStreamAdapter(\n\t\topenaiStream: AsyncIterable<ChatCompletionChunk>,\n\t): LLMStream {\n\t\treturn {\n\t\t\tasync *[Symbol.asyncIterator](): AsyncIterator<StreamChunk> {\n\t\t\t\tfor await (const openaiChunk of openaiStream) {\n\t\t\t\t\tconst choice = openaiChunk.choices[0];\n\t\t\t\t\tif (choice) {\n\t\t\t\t\t\tconst streamChunk: StreamChunk = {\n\t\t\t\t\t\t\tdelta: {\n\t\t\t\t\t\t\t\trole: choice.delta?.role || undefined,\n\t\t\t\t\t\t\t\tcontent: choice.delta?.content || undefined,\n\t\t\t\t\t\t\t\ttool_calls: choice.delta?.tool_calls?.map(\n\t\t\t\t\t\t\t\t\t(tc) =>\n\t\t\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\t\t\tindex: tc.index,\n\t\t\t\t\t\t\t\t\t\t\tid: tc.id,\n\t\t\t\t\t\t\t\t\t\t\ttype: tc.type,\n\t\t\t\t\t\t\t\t\t\t\tfunction: tc.function,\n\t\t\t\t\t\t\t\t\t\t}) as ToolCallDelta,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfinish_reason: choice.finish_reason as any,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tprovider: \"openai\",\n\t\t\t\t\t\t\t\tmodel: openaiChunk.model,\n\t\t\t\t\t\t\t\tid: openaiChunk.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tyield streamChunk;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tmetadata: { provider: \"openai\" },\n\t\t};\n\t}\n\n\tconvertToolsToFunctions(tools: ConnectorTool[]): ChatCompletionTool[] {\n\t\tconst functions: ChatCompletionTool[] = [];\n\t\tfor (const tool of tools) {\n\t\t\tfunctions.push({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.toolName,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.inputSchema,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn functions;\n\t}\n}\n"],"mappings":"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","names":[]}
|
package/index.ts
CHANGED
|
@@ -85,9 +85,17 @@ export class AzureOpenAI extends BaseModel<CCMessageParam, ChatCompletionTool> {
|
|
|
85
85
|
const sessionContent: CCMessageParam[] = !thread
|
|
86
86
|
? []
|
|
87
87
|
: thread.messages.map((message: MessageObject) => {
|
|
88
|
+
// Prefer the real query stashed in metadata when a display text was
|
|
89
|
+
// shown in its place (displayQuery), so multi-turn history carries
|
|
90
|
+
// the actual query the model saw on the first turn — not the short
|
|
91
|
+
// label. Falls back to the stored content otherwise.
|
|
92
|
+
const content =
|
|
93
|
+
typeof message.metadata?.query === "string"
|
|
94
|
+
? message.metadata.query
|
|
95
|
+
: (message.content.parts[0] as string);
|
|
88
96
|
return {
|
|
89
97
|
role: this.getMessageRole(message.role),
|
|
90
|
-
content
|
|
98
|
+
content,
|
|
91
99
|
};
|
|
92
100
|
});
|
|
93
101
|
const userContent: CCMessageParam = { role: "user", content: query };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ainetwork/adk-provider-model-azure",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"author": "AI Network (https://ainetwork.ai)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"openai": "^6.9.1"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
|
-
"@ainetwork/adk": "^0.7.
|
|
27
|
+
"@ainetwork/adk": "^0.7.3"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"typescript": "^5.0.0"
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"publishConfig": {
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "c4ae405d3279b61e845f288e661d121f8a6a3a0b"
|
|
37
37
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { MessageObject, ThreadObject } from "@ainetwork/adk/types/memory";
|
|
2
|
+
import { AzureOpenAI } from "../index";
|
|
3
|
+
|
|
4
|
+
function makeProvider(): AzureOpenAI {
|
|
5
|
+
return new AzureOpenAI({
|
|
6
|
+
endpoint: "https://example.azure.test",
|
|
7
|
+
apiKey: "test-key",
|
|
8
|
+
apiVersion: "2024-10-21",
|
|
9
|
+
modelName: "gpt-test",
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function userMessage(
|
|
14
|
+
content: string,
|
|
15
|
+
metadata?: Record<string, unknown>,
|
|
16
|
+
): MessageObject {
|
|
17
|
+
return {
|
|
18
|
+
messageId: "m1",
|
|
19
|
+
role: "USER" as MessageObject["role"],
|
|
20
|
+
timestamp: 1,
|
|
21
|
+
content: { type: "text", parts: [content] },
|
|
22
|
+
metadata,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe("AzureOpenAI.generateMessages history reconstruction", () => {
|
|
27
|
+
it("uses metadata.query (the real query) over the displayed label in history", () => {
|
|
28
|
+
const provider = makeProvider();
|
|
29
|
+
const thread = {
|
|
30
|
+
messages: [
|
|
31
|
+
// A seeded message: the user saw a short label, but the real query
|
|
32
|
+
// (with embedded document) was stashed in metadata.query.
|
|
33
|
+
userMessage("이 일지에 대해 대화해보기", {
|
|
34
|
+
query: "전체 문서 내용: 피자힐 2026-07-01 매출 100만원 ...",
|
|
35
|
+
}),
|
|
36
|
+
],
|
|
37
|
+
} as unknown as ThreadObject;
|
|
38
|
+
|
|
39
|
+
const messages = provider.generateMessages({
|
|
40
|
+
query: "작년과의 차이를 분석해봐",
|
|
41
|
+
thread,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// The historical user turn must carry the real query, not the short label.
|
|
45
|
+
const historyTurn = messages.find(
|
|
46
|
+
(m) =>
|
|
47
|
+
m.role === "user" &&
|
|
48
|
+
typeof m.content === "string" &&
|
|
49
|
+
m.content.includes("피자힐"),
|
|
50
|
+
);
|
|
51
|
+
expect(historyTurn).toBeDefined();
|
|
52
|
+
expect(
|
|
53
|
+
messages.some((m) => m.content === "이 일지에 대해 대화해보기"),
|
|
54
|
+
).toBe(false);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("falls back to content.parts[0] when no metadata.query is present", () => {
|
|
58
|
+
const provider = makeProvider();
|
|
59
|
+
const thread = {
|
|
60
|
+
messages: [userMessage("평범한 질문입니다")],
|
|
61
|
+
} as unknown as ThreadObject;
|
|
62
|
+
|
|
63
|
+
const messages = provider.generateMessages({ query: "다음 질문", thread });
|
|
64
|
+
expect(messages.some((m) => m.content === "평범한 질문입니다")).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
});
|