From b08ceb43a8e9b4969da0518f0d75dd020b5227ff Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Fri, 17 Oct 2025 15:39:49 +0530 Subject: [PATCH 1/9] [Automated] Update the toml files --- ballerina/Ballerina.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index 0fe26e5..058aa54 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -17,3 +17,9 @@ groupId = "io.ballerina.lib" artifactId = "ai.azure-native" version = "1.2.0" path = "../native/build/libs/ai.azure-native-1.2.0-SNAPSHOT.jar" + +[[dependency]] +org="ballerina" +name="ai" +version="1.6.0" +repository="local" From 3e6ebed87c95ed6010b4e064668aa260fc32bd9a Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Fri, 17 Oct 2025 15:41:13 +0530 Subject: [PATCH 2/9] [Automated] Update the toml files --- ballerina/Dependencies.toml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/ballerina/Dependencies.toml b/ballerina/Dependencies.toml index d47d55d..830dd94 100644 --- a/ballerina/Dependencies.toml +++ b/ballerina/Dependencies.toml @@ -5,12 +5,12 @@ [ballerina] dependencies-toml-version = "2" -distribution-version = "2201.12.9" +distribution-version = "2201.12.7" [[package]] org = "ballerina" name = "ai" -version = "1.5.4" +version = "1.6.0" dependencies = [ {org = "ballerina", name = "constraint"}, {org = "ballerina", name = "data.jsondata"}, @@ -26,6 +26,7 @@ dependencies = [ {org = "ballerina", name = "math.vector"}, {org = "ballerina", name = "mcp"}, {org = "ballerina", name = "mime"}, + {org = "ballerina", name = "observe"}, {org = "ballerina", name = "time"}, {org = "ballerina", name = "url"}, {org = "ballerina", name = "uuid"}, @@ -33,7 +34,8 @@ dependencies = [ ] modules = [ {org = "ballerina", packageName = "ai", moduleName = "ai"}, - {org = "ballerina", packageName = "ai", moduleName = "ai.intelligence"} + {org = "ballerina", packageName = "ai", moduleName = "ai.intelligence"}, + {org = "ballerina", packageName = "ai", moduleName = "ai.observe"} ] [[package]] @@ -82,7 +84,7 @@ dependencies = [ [[package]] org = "ballerina" name = "data.jsondata" -version = "1.1.2" +version = "1.1.3" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.object"} @@ -91,7 +93,7 @@ dependencies = [ [[package]] org = "ballerina" name = "data.xmldata" -version = "1.5.0" +version = "1.5.2" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.object"} @@ -278,7 +280,7 @@ version = "1.2.0" [[package]] org = "ballerina" name = "mcp" -version = "1.0.0" +version = "1.0.1" dependencies = [ {org = "ballerina", name = "http"}, {org = "ballerina", name = "jballerina.java"}, From e85955065e8fd97aa7c97120131c685f79d72bef Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Mon, 20 Oct 2025 11:57:39 +0530 Subject: [PATCH 3/9] Add tracing to model provider and embedding provider --- ballerina/embedding_provider.bal | 49 ++++++++++++++++--- ballerina/model-provider.bal | 72 ++++++++++++++++++++++++--- ballerina/provider_utils.bal | 83 +++++++++++++++++++++++++------- 3 files changed, 171 insertions(+), 33 deletions(-) diff --git a/ballerina/embedding_provider.bal b/ballerina/embedding_provider.bal index c241ddb..64361c1 100644 --- a/ballerina/embedding_provider.bal +++ b/ballerina/embedding_provider.bal @@ -15,6 +15,7 @@ // under the License. import ballerina/ai; +import ballerina/ai.observe; import ballerinax/azure.openai.embeddings; # EmbeddingProvider provides an interface for interacting with Azure OpenAI Embedding Models. @@ -76,19 +77,38 @@ public distinct isolated client class EmbeddingProvider { # + chunk - The `ai:Chunk` containing the content to embed # + return - The resulting `ai:Embedding` on success; otherwise, returns an `ai:Error` isolated remote function embed(ai:Chunk chunk) returns ai:Embedding|ai:Error { + observe:EmbeddingSpan span = observe:createEmbeddingSpan(self.deploymentId); + span.addProvider("azure.ai.openai"); + if chunk !is ai:TextDocument|ai:TextChunk { - return error ai:Error("Unsupported document type. only 'ai:TextDocument' or 'ai:TextChunk' is supported"); + ai:Error err = error ai:Error("Unsupported chunk type. only 'ai:TextDocument|ai:TextChunk' is supported"); + span.close(err); + return err; } + do { + span.addInputContent(chunk.content); embeddings:Inline_response_200 response = check self.embeddingsClient->/deployments/[self.deploymentId]/embeddings.post( apiVersion = self.apiVersion, payload = { input: chunk.content } ); - return check response.data[0].embedding.cloneWithType(); + + span.addInputTokenCount(response.usage.prompt_tokens); + if response.data.length() == 0 { + ai:Error err = error("No embeddings generated for the provided chunk"); + span.close(err); + return err; + } + + ai:Embedding embedding = check response.data[0].embedding.cloneWithType(); + span.close(); + return embedding; } on fail error e { - return error ai:Error("Unable to obtain embedding for the provided chunk", e); + ai:Error err = error ai:Error("Unable to obtain embedding for the provided chunk", e); + span.close(err); + return err; } } @@ -97,10 +117,18 @@ public distinct isolated client class EmbeddingProvider { # + chunks - The array of chunks to be converted into embeddings # + return - An array of embeddings on success, or an `ai:Error` isolated remote function batchEmbed(ai:Chunk[] chunks) returns ai:Embedding[]|ai:Error { + observe:EmbeddingSpan span = observe:createEmbeddingSpan(self.deploymentId); + span.addProvider("azure.ai.openai"); + if !chunks.every(chunk => chunk is ai:TextChunk|ai:TextDocument) { - return error("Unsupported chunk type. only 'ai:TextChunk[]|ai:TextDocument[]' is supported"); + ai:Error err = error("Unsupported chunk type. only 'ai:TextChunk[]|ai:TextDocument[]' is supported"); + span.close(err); + return err; } do { + string[] input = chunks.map(chunk => chunk.content.toString()); + span.addInputContent(input); + embeddings:InputItemsString[] inputItems = from ai:Chunk chunk in chunks select check chunk.content.cloneWithType(); embeddings:Inline_response_200 response = check self.embeddingsClient->/deployments/[self.deploymentId]/embeddings.post( @@ -109,11 +137,16 @@ public distinct isolated client class EmbeddingProvider { input: inputItems } ); - return - from embeddings:Inline_response_200_data data in response.data - select check data.embedding.cloneWithType(); + + span.addInputTokenCount(response.usage.prompt_tokens); + ai:Embedding[] embeddings = from embeddings:Inline_response_200_data data in response.data + select check data.embedding.cloneWithType(); + span.close(); + return embeddings; } on fail error e { - return error ai:Error("Unable to obtain embedding for the provided document", e); + ai:Error err = error("Unable to obtain embedding for the provided document", e); + span.close(err); + return err; } } } diff --git a/ballerina/model-provider.bal b/ballerina/model-provider.bal index 7b5cd0f..4eea2d4 100644 --- a/ballerina/model-provider.bal +++ b/ballerina/model-provider.bal @@ -15,6 +15,7 @@ // under the License. import ballerina/ai; +import ballerina/ai.observe; import ballerina/jballerina.java; import ballerinax/azure.openai.chat; @@ -89,6 +90,21 @@ public isolated client class OpenAiModelProvider { # + return - Function to be called, chat response or an error in-case of failures isolated remote function chat(ai:ChatMessage[]|ai:ChatUserMessage messages, ai:ChatCompletionFunctions[] tools, string? stop = ()) returns ai:ChatAssistantMessage|ai:Error { + observe:ChatSpan span = observe:createChatSpan(self.deploymentId); + span.addProvider("azure.ai.openai"); + span.addOutputType(observe:TEXT); + if stop is string { + span.addStopSequence(stop); + } + span.addTemperature(self.temperature); + json|ai:Error jsonMsg = check convertMessageToJson(messages); + if jsonMsg is ai:Error { + ai:Error err = error("Error while transforming input", jsonMsg); + span.close(err); + return err; + } + span.addInputMessages(jsonMsg); + chat:CreateChatCompletionRequest request = { stop, messages: check self.mapToChatCompletionRequestMessage(messages), @@ -97,11 +113,14 @@ public isolated client class OpenAiModelProvider { }; if tools.length() > 0 { request.functions = tools; + span.addTools(tools); } chat:CreateChatCompletionResponse|error response = self.llmClient->/deployments/[self.deploymentId]/chat/completions.post(self.apiVersion, request); if response is error { - return error ai:LlmConnectionError("Error while connecting to the model", response); + ai:Error err = error ai:LlmConnectionError("Error while connecting to the model", response); + span.close(err); + return err; } record {| @@ -113,24 +132,52 @@ public isolated client class OpenAiModelProvider { |}[]? choices = response.choices; if choices is () || choices.length() == 0 { - return error ai:LlmInvalidResponseError("Empty response from the model when using function call API"); + ai:Error err = error ai:LlmInvalidResponseError("Empty response from the model when using function call API"); + span.close(err); + return err; + } + + string|int? responseId = response.id; + if responseId is string { + span.addResponseId(responseId); + } + int? inputTokens = response.usage?.prompt_tokens; + if inputTokens is int { + span.addInputTokenCount(inputTokens); + } + int? outputTokens = response.usage?.completion_tokens; + if outputTokens is int { + span.addOutputTokenCount(outputTokens); + } + string? finishReason = choices[0].finish_reason; + if finishReason is string { + span.addFinishReason(finishReason); } + chat:ChatCompletionResponseMessage? message = choices[0].message; ai:ChatAssistantMessage chatAssistantMessage = {role: ai:ASSISTANT, content: message?.content}; chat:ChatCompletionFunctionCall? functionCall = message?.function_call; - if functionCall is chat:ChatCompletionFunctionCall { - chatAssistantMessage.toolCalls = [check self.mapToFunctionCall(functionCall)]; + if functionCall is () { + span.addOutputMessages(chatAssistantMessage); + span.close(); + return chatAssistantMessage; + } + ai:FunctionCall|ai:Error toolCall = check self.mapToFunctionCall(functionCall); + if toolCall is ai:Error { + span.close(toolCall); + return toolCall; } + chatAssistantMessage.toolCalls = [toolCall]; return chatAssistantMessage; } # Sends a chat request to the model and generates a value that belongs to the type # corresponding to the type descriptor argument. - # + # # + prompt - The prompt to use in the chat messages # + td - Type descriptor specifying the expected return type format # + return - Generates a value that belongs to the type, or an error if generation fails - isolated remote function generate(ai:Prompt prompt, @display {label: "Expected type"} typedesc td = <>) + isolated remote function generate(ai:Prompt prompt, @display {label: "Expected type"} typedesc td = <>) returns td|ai:Error = @java:Method { 'class: "io.ballerina.lib.ai.azure.Generator" } external; @@ -158,7 +205,7 @@ public isolated client class OpenAiModelProvider { assistantMessage["content"] = message?.content; } chatCompletionRequestMessages.push(assistantMessage); - } else if message is ai:ChatFunctionMessage { + } else { chatCompletionRequestMessages.push(message); } } @@ -233,3 +280,14 @@ isolated function getChatMessageStringContent(ai:Prompt|string prompt) returns s } return promptStr.trim(); } + +isolated function convertMessageToJson(ai:ChatMessage[]|ai:ChatMessage messages) returns json|ai:Error { + if messages is ai:ChatMessage[] { + return messages.'map(msg => msg is ai:ChatUserMessage|ai:ChatSystemMessage ? check convertMessageToJson(msg) : msg); + } + if messages is ai:ChatUserMessage|ai:ChatSystemMessage { + + } + return messages !is ai:ChatUserMessage|ai:ChatSystemMessage ? messages : + {role: messages.role, content: check getChatMessageStringContent(messages.content), name: messages.name}; +} diff --git a/ballerina/provider_utils.bal b/ballerina/provider_utils.bal index 811fd90..a9b1fb6 100644 --- a/ballerina/provider_utils.bal +++ b/ballerina/provider_utils.bal @@ -15,6 +15,7 @@ // under the License. import ballerina/ai; +import ballerina/ai.observe; import ballerina/constraint; import ballerina/lang.array; import ballerinax/azure.openai.chat; @@ -105,17 +106,22 @@ isolated function getGetResultsToolChoice() returns chat:ChatCompletionNamedTool } }; -isolated function getGetResultsTool(map parameters) returns chat:ChatCompletionTool[]|error => - [ - { - 'type: FUNCTION, - 'function: { - name: GET_RESULTS_TOOL, - parameters: check parameters.cloneWithType(), - description: "Tool to call with the response from a large language model (LLM) for a user prompt." - } +isolated function getGetResultsTool(map parameters) returns chat:ChatCompletionTool[]|ai:Error { + chat:ChatCompletionFunctionParameters|error toolParam = parameters.ensureType(); + if toolParam is error { + return error("Error in generated schema: " + toolParam.message()); } -]; + return [ + { + 'type: FUNCTION, + 'function: { + name: GET_RESULTS_TOOL, + parameters: toolParam, + description: "Tool to call with the response from a large language model (LLM) for a user prompt." + } + } + ]; +} isolated function generateChatCreationContent(ai:Prompt prompt) returns DocumentContentPart[]|ai:Error { string[] & readonly strings = prompt.strings; @@ -234,11 +240,19 @@ isolated function handleParseResponseError(error chatResponseError) returns erro isolated function generateLlmResponse(chat:Client llmClient, string deploymentId, string apiVersion, decimal temperature, int maxTokens, ai:Prompt prompt, typedesc expectedResponseTypedesc) returns anydata|ai:Error { - DocumentContentPart[] content = check generateChatCreationContent(prompt); - ResponseSchema ResponseSchema = check getExpectedResponseSchema(expectedResponseTypedesc); - chat:ChatCompletionTool[]|error tools = getGetResultsTool(ResponseSchema.schema); - if tools is error { - return error("Error in generated schema: " + tools.message()); + observe:GenerateContentSpan span = observe:createGenerateContentSpan(deploymentId); + span.addTemperature(temperature); + + DocumentContentPart[] content; + ResponseSchema responseSchema; + chat:ChatCompletionTool[] tools; + do { + content = check generateChatCreationContent(prompt); + responseSchema = check getExpectedResponseSchema(expectedResponseTypedesc); + tools = check getGetResultsTool(responseSchema.schema); + } on fail ai:Error err { + span.close(err); + return err; } chat:CreateChatCompletionRequest request = { @@ -253,13 +267,43 @@ isolated function generateLlmResponse(chat:Client llmClient, string deploymentId max_tokens: maxTokens, tool_choice: getGetResultsToolChoice() }; + span.addInputMessages(request.messages.toJson()); chat:CreateChatCompletionResponse|error response = llmClient->/deployments/[deploymentId]/chat/completions.post(apiVersion, request); if response is error { - return error("LLM call failed: " + response.message(), cause = response.cause(), detail = response.detail()); + ai:Error err = error("LLM call failed: " + response.message(), cause = response.cause(), detail = response.detail()); + span.close(err); + return err; } + string? responseId = response.id; + if responseId is string { + span.addResponseId(responseId); + } + int? inputTokens = response.usage?.prompt_tokens; + if inputTokens is int { + span.addInputTokenCount(inputTokens); + } + int? outputTokens = response.usage?.completion_tokens; + if outputTokens is int { + span.addOutputTokenCount(outputTokens); + } + + anydata|ai:Error result = ensureAnydataResult(response, expectedResponseTypedesc, + responseSchema.isOriginallyJsonObject, span); + if result is ai:Error { + span.close(result); + return result; + } + span.addOutputMessages(result.toJson()); + span.close(); + return result; +} + +isolated function ensureAnydataResult(chat:CreateChatCompletionResponse response, + typedesc expectedResponseTypedesc, boolean isOriginallyJsonObject, + observe:GenerateContentSpan span) returns anydata|ai:Error { record { chat:ChatCompletionResponseMessage message?; chat:ContentFilterChoiceResults content_filter_results?; @@ -276,6 +320,10 @@ isolated function generateLlmResponse(chat:Client llmClient, string deploymentId if toolCalls is () || toolCalls.length() == 0 { return error(NO_RELEVANT_RESPONSE_FROM_THE_LLM); } + string? finishReason = choices[0].finish_reason; + if finishReason is string { + span.addFinishReason(finishReason); + } chat:ChatCompletionMessageToolCall tool = toolCalls[0]; map|error arguments = tool.'function.arguments.fromJsonStringWithType(); @@ -283,8 +331,7 @@ isolated function generateLlmResponse(chat:Client llmClient, string deploymentId return error(NO_RELEVANT_RESPONSE_FROM_THE_LLM); } - anydata|error res = parseResponseAsType(arguments.toJsonString(), expectedResponseTypedesc, - ResponseSchema.isOriginallyJsonObject); + anydata|error res = parseResponseAsType(arguments.toJsonString(), expectedResponseTypedesc, isOriginallyJsonObject); if res is error { return error ai:LlmInvalidGenerationError(string `Invalid value returned from the LLM Client, expected: '${ expectedResponseTypedesc.toBalString()}', found '${res.toBalString()}'`); From ca747fc68e2fc9b24009dac95eb3bf6dfad981ef Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Mon, 20 Oct 2025 12:19:00 +0530 Subject: [PATCH 4/9] Set generate method output type to json in tarce span --- ballerina/provider_utils.bal | 1 + 1 file changed, 1 insertion(+) diff --git a/ballerina/provider_utils.bal b/ballerina/provider_utils.bal index a9b1fb6..bf218e8 100644 --- a/ballerina/provider_utils.bal +++ b/ballerina/provider_utils.bal @@ -297,6 +297,7 @@ isolated function generateLlmResponse(chat:Client llmClient, string deploymentId return result; } span.addOutputMessages(result.toJson()); + span.addOutputType(observe:JSON); span.close(); return result; } From e9e345ead5487ed96c94b37c801b2cba378e2dab Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Mon, 20 Oct 2025 13:49:24 +0530 Subject: [PATCH 5/9] Add provider name to generate content trace --- ballerina/provider_utils.bal | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ballerina/provider_utils.bal b/ballerina/provider_utils.bal index bf218e8..4187542 100644 --- a/ballerina/provider_utils.bal +++ b/ballerina/provider_utils.bal @@ -242,7 +242,8 @@ isolated function generateLlmResponse(chat:Client llmClient, string deploymentId typedesc expectedResponseTypedesc) returns anydata|ai:Error { observe:GenerateContentSpan span = observe:createGenerateContentSpan(deploymentId); span.addTemperature(temperature); - + span.addProvider("azure.ai.openai"); + DocumentContentPart[] content; ResponseSchema responseSchema; chat:ChatCompletionTool[] tools; From 4f99c0aab00827f728a6436445c70befbdc3efc0 Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Mon, 20 Oct 2025 17:56:41 +0530 Subject: [PATCH 6/9] Add response model to embedding span --- ballerina/embedding_provider.bal | 1 + 1 file changed, 1 insertion(+) diff --git a/ballerina/embedding_provider.bal b/ballerina/embedding_provider.bal index 64361c1..ab1966f 100644 --- a/ballerina/embedding_provider.bal +++ b/ballerina/embedding_provider.bal @@ -95,6 +95,7 @@ public distinct isolated client class EmbeddingProvider { } ); + span.addResponseModel(response.model); span.addInputTokenCount(response.usage.prompt_tokens); if response.data.length() == 0 { ai:Error err = error("No embeddings generated for the provided chunk"); From 7f2efcc6011a90c5d4cab64eeaf44dfd95b0441a Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Mon, 20 Oct 2025 18:17:49 +0530 Subject: [PATCH 7/9] [Automated] Update the toml files --- ballerina/Ballerina.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index 058aa54..0fe26e5 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -17,9 +17,3 @@ groupId = "io.ballerina.lib" artifactId = "ai.azure-native" version = "1.2.0" path = "../native/build/libs/ai.azure-native-1.2.0-SNAPSHOT.jar" - -[[dependency]] -org="ballerina" -name="ai" -version="1.6.0" -repository="local" From 37fb289faff1f39054ee89641abc20e5172e2d82 Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Thu, 30 Oct 2025 13:16:44 +0530 Subject: [PATCH 8/9] [Automated] Update the toml files --- ballerina/Dependencies.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ballerina/Dependencies.toml b/ballerina/Dependencies.toml index 830dd94..6065305 100644 --- a/ballerina/Dependencies.toml +++ b/ballerina/Dependencies.toml @@ -5,12 +5,12 @@ [ballerina] dependencies-toml-version = "2" -distribution-version = "2201.12.7" +distribution-version = "2201.12.10" [[package]] org = "ballerina" name = "ai" -version = "1.6.0" +version = "1.7.0" dependencies = [ {org = "ballerina", name = "constraint"}, {org = "ballerina", name = "data.jsondata"}, @@ -75,7 +75,7 @@ modules = [ [[package]] org = "ballerina" name = "crypto" -version = "2.9.1" +version = "2.9.2" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "time"} @@ -113,7 +113,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.14.6" +version = "2.14.7" dependencies = [ {org = "ballerina", name = "auth"}, {org = "ballerina", name = "cache"}, @@ -264,7 +264,7 @@ dependencies = [ [[package]] org = "ballerina" name = "log" -version = "2.13.0" +version = "2.14.0" dependencies = [ {org = "ballerina", name = "io"}, {org = "ballerina", name = "jballerina.java"}, @@ -314,7 +314,7 @@ dependencies = [ [[package]] org = "ballerina" name = "observe" -version = "1.5.0" +version = "1.6.0" dependencies = [ {org = "ballerina", name = "jballerina.java"} ] From 7357ff3d42f08d069271db4bb3e1a55d44d67b14 Mon Sep 17 00:00:00 2001 From: MohamedSabthar Date: Thu, 30 Oct 2025 13:17:40 +0530 Subject: [PATCH 9/9] [Automated] Update the toml files --- ballerina/Dependencies.toml | 448 ------------------------------------ 1 file changed, 448 deletions(-) delete mode 100644 ballerina/Dependencies.toml diff --git a/ballerina/Dependencies.toml b/ballerina/Dependencies.toml deleted file mode 100644 index 6065305..0000000 --- a/ballerina/Dependencies.toml +++ /dev/null @@ -1,448 +0,0 @@ -# AUTO-GENERATED FILE. DO NOT MODIFY. - -# This file is auto-generated by Ballerina for managing dependency versions. -# It should not be modified by hand. - -[ballerina] -dependencies-toml-version = "2" -distribution-version = "2201.12.10" - -[[package]] -org = "ballerina" -name = "ai" -version = "1.7.0" -dependencies = [ - {org = "ballerina", name = "constraint"}, - {org = "ballerina", name = "data.jsondata"}, - {org = "ballerina", name = "data.xmldata"}, - {org = "ballerina", name = "file"}, - {org = "ballerina", name = "http"}, - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.array"}, - {org = "ballerina", name = "lang.regexp"}, - {org = "ballerina", name = "lang.runtime"}, - {org = "ballerina", name = "log"}, - {org = "ballerina", name = "math.vector"}, - {org = "ballerina", name = "mcp"}, - {org = "ballerina", name = "mime"}, - {org = "ballerina", name = "observe"}, - {org = "ballerina", name = "time"}, - {org = "ballerina", name = "url"}, - {org = "ballerina", name = "uuid"}, - {org = "ballerina", name = "yaml"} -] -modules = [ - {org = "ballerina", packageName = "ai", moduleName = "ai"}, - {org = "ballerina", packageName = "ai", moduleName = "ai.intelligence"}, - {org = "ballerina", packageName = "ai", moduleName = "ai.observe"} -] - -[[package]] -org = "ballerina" -name = "auth" -version = "2.14.0" -dependencies = [ - {org = "ballerina", name = "crypto"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.array"}, - {org = "ballerina", name = "lang.string"}, - {org = "ballerina", name = "log"} -] - -[[package]] -org = "ballerina" -name = "cache" -version = "3.10.0" -dependencies = [ - {org = "ballerina", name = "constraint"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "task"}, - {org = "ballerina", name = "time"} -] - -[[package]] -org = "ballerina" -name = "constraint" -version = "1.7.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] -modules = [ - {org = "ballerina", packageName = "constraint", moduleName = "constraint"} -] - -[[package]] -org = "ballerina" -name = "crypto" -version = "2.9.2" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "time"} -] - -[[package]] -org = "ballerina" -name = "data.jsondata" -version = "1.1.3" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.object"} -] - -[[package]] -org = "ballerina" -name = "data.xmldata" -version = "1.5.2" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.object"} -] - -[[package]] -org = "ballerina" -name = "file" -version = "1.12.0" -dependencies = [ - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "os"}, - {org = "ballerina", name = "time"} -] - -[[package]] -org = "ballerina" -name = "http" -version = "2.14.7" -dependencies = [ - {org = "ballerina", name = "auth"}, - {org = "ballerina", name = "cache"}, - {org = "ballerina", name = "constraint"}, - {org = "ballerina", name = "crypto"}, - {org = "ballerina", name = "data.jsondata"}, - {org = "ballerina", name = "file"}, - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "jwt"}, - {org = "ballerina", name = "lang.array"}, - {org = "ballerina", name = "lang.decimal"}, - {org = "ballerina", name = "lang.int"}, - {org = "ballerina", name = "lang.regexp"}, - {org = "ballerina", name = "lang.runtime"}, - {org = "ballerina", name = "lang.string"}, - {org = "ballerina", name = "lang.value"}, - {org = "ballerina", name = "log"}, - {org = "ballerina", name = "mime"}, - {org = "ballerina", name = "oauth2"}, - {org = "ballerina", name = "observe"}, - {org = "ballerina", name = "time"}, - {org = "ballerina", name = "url"} -] -modules = [ - {org = "ballerina", packageName = "http", moduleName = "http"}, - {org = "ballerina", packageName = "http", moduleName = "http.httpscerr"} -] - -[[package]] -org = "ballerina" -name = "io" -version = "1.8.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.value"} -] - -[[package]] -org = "ballerina" -name = "jballerina.java" -version = "0.0.0" -modules = [ - {org = "ballerina", packageName = "jballerina.java", moduleName = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "jwt" -version = "2.15.1" -dependencies = [ - {org = "ballerina", name = "cache"}, - {org = "ballerina", name = "crypto"}, - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.int"}, - {org = "ballerina", name = "lang.string"}, - {org = "ballerina", name = "log"}, - {org = "ballerina", name = "time"} -] - -[[package]] -org = "ballerina" -name = "lang.__internal" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.object"} -] - -[[package]] -org = "ballerina" -name = "lang.array" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.__internal"} -] -modules = [ - {org = "ballerina", packageName = "lang.array", moduleName = "lang.array"} -] - -[[package]] -org = "ballerina" -name = "lang.decimal" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "lang.error" -version = "0.0.0" -scope = "testOnly" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "lang.int" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.__internal"}, - {org = "ballerina", name = "lang.object"} -] - -[[package]] -org = "ballerina" -name = "lang.object" -version = "0.0.0" - -[[package]] -org = "ballerina" -name = "lang.regexp" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "lang.runtime" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "lang.string" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.regexp"} -] - -[[package]] -org = "ballerina" -name = "lang.value" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "log" -version = "2.14.0" -dependencies = [ - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.value"}, - {org = "ballerina", name = "observe"} -] - -[[package]] -org = "ballerina" -name = "math.vector" -version = "1.2.0" - -[[package]] -org = "ballerina" -name = "mcp" -version = "1.0.1" -dependencies = [ - {org = "ballerina", name = "http"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "uuid"} -] - -[[package]] -org = "ballerina" -name = "mime" -version = "2.12.0" -dependencies = [ - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.int"}, - {org = "ballerina", name = "log"} -] - -[[package]] -org = "ballerina" -name = "oauth2" -version = "2.14.1" -dependencies = [ - {org = "ballerina", name = "cache"}, - {org = "ballerina", name = "crypto"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "log"}, - {org = "ballerina", name = "time"}, - {org = "ballerina", name = "url"} -] - -[[package]] -org = "ballerina" -name = "observe" -version = "1.6.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "os" -version = "1.10.1" -dependencies = [ - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "task" -version = "2.11.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "time"}, - {org = "ballerina", name = "uuid"} -] - -[[package]] -org = "ballerina" -name = "test" -version = "0.0.0" -scope = "testOnly" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.array"}, - {org = "ballerina", name = "lang.error"} -] -modules = [ - {org = "ballerina", packageName = "test", moduleName = "test"} -] - -[[package]] -org = "ballerina" -name = "time" -version = "2.7.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "url" -version = "2.6.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"} -] - -[[package]] -org = "ballerina" -name = "uuid" -version = "1.10.0" -dependencies = [ - {org = "ballerina", name = "crypto"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.int"}, - {org = "ballerina", name = "time"} -] - -[[package]] -org = "ballerina" -name = "yaml" -version = "0.8.0" -dependencies = [ - {org = "ballerina", name = "file"}, - {org = "ballerina", name = "io"}, - {org = "ballerina", name = "lang.array"}, - {org = "ballerina", name = "lang.regexp"}, - {org = "ballerina", name = "log"} -] - -[[package]] -org = "ballerinai" -name = "observe" -version = "0.0.0" -dependencies = [ - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "observe"} -] - -[[package]] -org = "ballerinax" -name = "ai.azure" -version = "1.2.0" -dependencies = [ - {org = "ballerina", name = "ai"}, - {org = "ballerina", name = "constraint"}, - {org = "ballerina", name = "http"}, - {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "lang.array"}, - {org = "ballerina", name = "test"}, - {org = "ballerinax", name = "azure.openai.chat"}, - {org = "ballerinax", name = "azure.openai.embeddings"} -] -modules = [ - {org = "ballerinax", packageName = "ai.azure", moduleName = "ai.azure"} -] - -[[package]] -org = "ballerinax" -name = "azure.openai.chat" -version = "3.0.2" -dependencies = [ - {org = "ballerina", name = "constraint"}, - {org = "ballerina", name = "http"}, - {org = "ballerina", name = "url"}, - {org = "ballerinai", name = "observe"} -] -modules = [ - {org = "ballerinax", packageName = "azure.openai.chat", moduleName = "azure.openai.chat"} -] - -[[package]] -org = "ballerinax" -name = "azure.openai.embeddings" -version = "1.0.2" -dependencies = [ - {org = "ballerina", name = "constraint"}, - {org = "ballerina", name = "http"}, - {org = "ballerina", name = "url"}, - {org = "ballerinai", name = "observe"} -] -modules = [ - {org = "ballerinax", packageName = "azure.openai.embeddings", moduleName = "azure.openai.embeddings"} -] -