call method
Implementation
@override
Future<ChatResult> call(ChatRequest request) async {
request = request.adapted;
lc.ChatResult result = await lc.ChatOpenAI(
apiKey: apiKey,
baseUrl: baseUrl,
defaultOptions: lc.ChatOpenAIOptions(
model: request.model.id,
user: request.user,
responseFormat:
request.responseFormat != null
? lc.ChatOpenAIResponseFormat.jsonSchema(
lc.ChatOpenAIJsonSchema(
name: request.responseFormat!.name,
strict: true,
description: request.responseFormat!.description,
schema: request.responseFormat!.schema,
),
)
: null,
toolChoice: request.tools.isNotEmpty ? lc.ChatToolChoiceAuto() : null,
tools:
request.tools.isEmpty
? null
: request.tools.map((i) => i.toolSchema.toLangChain).toList(),
),
).invoke(
lc.PromptValue.chat([for (Message i in request.messages) i.toLangChain]),
);
ChatUsage usage = ChatUsage(
inputTokens: result.usage.promptTokens ?? 0,
outputTokens: result.usage.responseTokens ?? 0,
);
return ChatResult(
message: result.output.toAgentic as AgentMessage,
realCost: request.model.cost.getRealCost(
usage.inputTokens,
usage.outputTokens,
),
metadata: result.metadata,
finishReason: result.finishReason.toAgentic,
usage: usage,
);
}