Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
27647c2
Adding VoyageAI integration
fzowl Nov 17, 2025
3904ce3
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
311f26b
Merge pull request #346 from microsoft/dependabot/github_actions/acti…
karianna Nov 24, 2025
a26b027
Merge branch 'main' into voyageai_integration
fzowl Dec 13, 2025
07f20c3
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
35552ba
Merge pull request #347 from microsoft/dependabot/github_actions/acti…
karianna Dec 15, 2025
eb9a8cc
Adding voyage-multimodal-3.5 tests
fzowl Dec 19, 2025
9045705
Bump org.apache.logging.log4j:log4j-core from 2.24.1 to 2.25.3
dependabot[bot] Dec 19, 2025
a63d5b6
Merge pull request #348 from microsoft/dependabot/maven/org.apache.lo…
karianna Dec 23, 2025
a21efc3
Merge branch 'main' into voyageai_integration
fzowl Jan 24, 2026
62684bd
Bump org.assertj:assertj-core
dependabot[bot] Jan 26, 2026
8dc10de
Merge pull request #349 from microsoft/dependabot/maven/samples/seman…
karianna Jan 26, 2026
ab661a6
Merge branch 'main' into voyageai_integration
fzowl Jan 30, 2026
c222fb3
Bump testcontainers version
johnoliver Feb 3, 2026
65fbb3b
Fix typo
johnoliver Feb 3, 2026
f863395
Merge pull request #350 from johnoliver/fix-build
johnoliver Feb 3, 2026
1db294c
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Mar 2, 2026
58fbd50
Bump net.sourceforge.pmd:pmd-core from 7.10.0 to 7.22.0
dependabot[bot] Mar 2, 2026
21b15c1
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 2, 2026
839d08b
Merge pull request #354 from microsoft/dependabot/github_actions/acti…
karianna Mar 4, 2026
4036986
Merge pull request #352 from microsoft/dependabot/maven/semantickerne…
karianna Mar 4, 2026
db6ddc1
Merge pull request #353 from microsoft/dependabot/maven/net.sourcefor…
karianna Mar 4, 2026
33e1a5d
Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
dependabot[bot] Apr 10, 2026
a865654
Merge pull request #355 from microsoft/dependabot/maven/org.apache.lo…
karianna Apr 11, 2026
7177b90
Bump actions/github-script from 8 to 9
dependabot[bot] Apr 13, 2026
24e0639
Merge pull request #356 from microsoft/dependabot/github_actions/acti…
karianna Apr 13, 2026
c323023
Fix storage filter issues
johnoliver Apr 16, 2026
a6809be
Fix prompt parsing issues
johnoliver Apr 22, 2026
55f5d71
Fix classloading
johnoliver Apr 16, 2026
3128efc
Support max_completion_tokens and bump maven versions
johnoliver Apr 16, 2026
bd492a6
Bump versions
johnoliver Apr 16, 2026
5377046
Debump handlebars
johnoliver Apr 16, 2026
ca64454
Add allow/block list
johnoliver Apr 20, 2026
f879a77
Fix null check
johnoliver Apr 22, 2026
021faab
Fix spotbugs issues
johnoliver Apr 22, 2026
ae4669c
Merge pull request #357 from johnoliver/release-1.4.5-prep
johnoliver Apr 22, 2026
70a1998
Allow disabling filter
johnoliver Apr 22, 2026
8ae9e05
Merge pull request #358 from johnoliver/release-1.4.5
johnoliver Apr 22, 2026
cec7e78
[maven-release-plugin] prepare release java-1.5.0
web-flow Apr 22, 2026
c62ca9e
[maven-release-plugin] prepare for next development iteration
web-flow Apr 22, 2026
5891d7e
Merge branch 'main' into release-1.5.0
johnoliver Apr 22, 2026
6b30fe1
Merge pull request #359 from johnoliver/release-1.5.0
johnoliver Apr 22, 2026
8213b74
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] May 6, 2026
87a20f0
Merge pull request #361 from microsoft/dependabot/maven/data/semantic…
karianna May 8, 2026
d042f6a
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 22, 2026
01c85b2
Merge pull request #363 from microsoft/dependabot/github_actions/acti…
karianna Jun 22, 2026
82ddc40
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jun 30, 2026
655ce04
Merge pull request #364 from microsoft/dependabot/maven/semantickerne…
karianna Jun 30, 2026
7b6ff97
Add profile that allows skiping container tests for when running in e…
johnoliver Jul 9, 2026
a7c6a33
Bump org.postgresql:postgresql in /data/semantickernel-data-jdbc
dependabot[bot] Jul 23, 2026
1e7b081
Bump org.postgresql:postgresql in /data/semantickernel-data-postgres
dependabot[bot] Jul 23, 2026
5afc1f6
Merge pull request #367 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
cf87575
Merge pull request #366 from microsoft/dependabot/maven/data/semantic…
karianna Jul 23, 2026
1f5f2d5
Bump com.fasterxml.jackson.core:jackson-core in /semantickernel-bom
dependabot[bot] Jul 23, 2026
11f19e4
Bump com.fasterxml.jackson.core:jackson-databind in /semantickernel-bom
dependabot[bot] Jul 23, 2026
1d38ee3
Merge pull request #368 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
0826127
Merge pull request #369 from microsoft/dependabot/maven/semantickerne…
karianna Jul 23, 2026
7b607f7
Bump actions/stale from 10 to 11
dependabot[bot] Aug 3, 2026
f18b06b
Merge pull request #370 from microsoft/dependabot/github_actions/acti…
karianna Aug 12, 2026
2ae4952
Merge remote-tracking branch 'upstream/main' into voyageai_integration
fzowl Aug 16, 2026
1e0a854
Make VoyageAI services and RerankResult final to satisfy SpotBugs CT_…
fzowl Aug 16, 2026
8287d7a
Align VoyageAI module parent version with current main (1.5.1-SNAPSHOT)
fzowl Aug 16, 2026
5139ecb
Suppress SpotBugs EI_EXPOSE_REP findings on VoyageAI DTO accessors
fzowl Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/close-inactive-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
days-before-issue-stale: 90
days-before-issue-close: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v7

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run: ./mvnw -B -Pbug-check -Pcompile-jdk${{ matrix.java-versions }} test --file pom.xml

# Uploads test artifacts for each JDK version
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
if: always()
with:
name: test_output_sk_jdk${{ matrix.java-versions }}u
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/java-integration-tests.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Need to use JDK 11 to build for JDK 8
- name: Set JDK
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/java-publish-package.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7

# Sets up the specified JDK version from the matrix
- uses: actions/setup-java@v5
Expand All@@ -30,7 +30,7 @@ jobs:
run: ./mvnw -B -DskipTests -Pcompile-jdk8 -P-compile-jdk17 clean deploy --file pom.xml -DaltDeploymentRepository=local::file:///tmp/target/staging-deploy

- name: Upload Artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: Artifacts
path: /tmp/target/staging-deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-issues.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
script: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-title-prefix.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ jobs:
pull-requests: write

steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
name: "Issue/PR: update title"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/markdown-link-check.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# check out the latest version of the code
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7

# Checks the status of hyperlinks in .md files in verbose mode
- name: Check links
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/typos.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Use custom config file
uses: crate-ci/typos@master
Expand Down
34 changes: 34 additions & 0 deletions PACKAGES.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,6 +39,9 @@ A BOM is provided that can be used to define the versions of all Semantic Kernel
`semantickernel-aiservices-openai`
: Provides a connector that can be used to interact with the OpenAI API.

`semantickernel-aiservices-voyageai`
: Provides connectors for VoyageAI's embedding and reranking services, including text embeddings, contextualized embeddings, multimodal embeddings, and document reranking.

## Example Configurations

### Example: OpenAI + SQLite
Expand DownExpand Up@@ -72,5 +75,36 @@ POM XML for a simple project that uses OpenAI.
</project>
```

### Example: VoyageAI Embeddings and Reranking

POM XML for a project that uses VoyageAI for embeddings and reranking.

```xml

<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${semantickernel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-voyageai</artifactId>
</dependency>
</dependencies>
</project>
```



2 changes: 1 addition & 1 deletion agents/semantickernel-agents-core/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
4 changes: 2 additions & 2 deletions aiservices/google/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand All@@ -17,7 +17,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.49.0</version>
<version>26.80.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion aiservices/huggingface/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,8 @@ public HuggingFacePromptExecutionSettings(PromptExecutionSettings copy) {
copy.getUser(),
copy.getStopSequences(),
copy.getTokenSelectionBiases(),
copy.getResponseFormat() == null ? null : copy.getResponseFormat());
copy.getResponseFormat() == null ? null : copy.getResponseFormat(),
copy.getMaxCompletionTokens() == null ? null : copy.getMaxCompletionTokens().toString());
this.topK = null;
this.repetitionPenalty = null;
this.maxTime = null;
Expand DownExpand Up@@ -101,10 +102,12 @@ public HuggingFacePromptExecutionSettings(
@Nullable Boolean details,
@Nullable Boolean logProbs,
@Nullable Integer topLogProbs,
@Nullable Long seed) {
@Nullable Long seed,
@Nullable Boolean maxCompletionTokensEnable) {
super(
serviceId, modelId, temperature, topP, presencePenalty, frequencyPenalty, maxTokens,
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat);
resultsPerPrompt, bestOf, user, stopSequences, tokenSelectionBiases, responseFormat,
Boolean.toString(Boolean.TRUE.equals(maxCompletionTokensEnable)));

this.topK = topK;
this.repetitionPenalty = repetitionPenalty;
Expand DownExpand Up@@ -151,6 +154,7 @@ public static HuggingFacePromptExecutionSettings fromExecutionSettings(
null,
null,
null,
null,
null);
}

Expand Down
2 changes: 1 addition & 1 deletion aiservices/openai/pom.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-parent</artifactId>
<version>1.4.4-RC3-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,8 +65,8 @@
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.orchestration.responseformat.JsonResponseSchema;
import com.microsoft.semantickernel.orchestration.responseformat.JsonSchemaResponseFormat;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.semanticfunctions.KernelArguments;
import com.microsoft.semantickernel.semanticfunctions.KernelFunction;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
Expand DownExpand Up@@ -149,7 +149,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
chatHistoryResult = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(chatHistoryResult.getMessages())));
Expand DownExpand Up@@ -183,7 +183,7 @@ public Mono<List<ChatMessageContent<?>>> getChatMessageContentsAsync(

if (invocationContext != null
&& invocationContext
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
.returnMode() == InvocationReturnMode.LAST_MESSAGE_ONLY) {
result = new ChatHistory(
Collections.singletonList(
CollectionUtil.getLastOrNull(result.getMessages())));
Expand DownExpand Up@@ -443,31 +443,31 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
.getOptions();

return Mono.deferContextual(contextView -> {
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}
ChatCompletionSpan span = ChatCompletionSpan.startChatCompletionSpan(
SemanticKernelTelemetry.getTelemetry(invocationContext),
contextView,
getModelId(),
SemanticKernelTelemetry.OPEN_AI_PROVIDER,
options.getMaxTokens(),
options.getTemperature(),
options.getTopP());

return getClient()
.getChatCompletionsWithResponse(getDeploymentName(), options,
OpenAIRequestSettings.getRequestOptions())
.contextWrite(span.getReactorContextModifier())
.flatMap(completionsResult -> {
if (completionsResult.getStatusCode() >= 400) {
return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR,
"Request failed: " + completionsResult.getStatusCode()));
}

return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
return Mono.just(completionsResult.getValue());
})
.doOnError(span::endSpanWithError)
.doOnSuccess(span::endSpanWithUsage)
.doOnTerminate(span::close);
})
.flatMap(completions -> {
List<ChatResponseMessage> responseMessages = completions
.getChoices()
Expand DownExpand Up@@ -920,7 +920,8 @@ private static ChatCompletionsOptions getCompletionsOptions(
}

Map<String, Integer> logit = null;
if (promptExecutionSettings.getTokenSelectionBiases() != null) {
if (promptExecutionSettings.getTokenSelectionBiases() != null
&& !promptExecutionSettings.getTokenSelectionBiases().isEmpty()) {
logit = promptExecutionSettings
.getTokenSelectionBiases()
.entrySet()
Expand All@@ -937,12 +938,13 @@ private static ChatCompletionsOptions getCompletionsOptions(
.setFrequencyPenalty(promptExecutionSettings.getFrequencyPenalty())
.setPresencePenalty(promptExecutionSettings.getPresencePenalty())
.setMaxTokens(promptExecutionSettings.getMaxTokens())
.setMaxCompletionTokens(promptExecutionSettings.getMaxCompletionTokens())
.setN(promptExecutionSettings.getResultsPerPrompt())
// Azure OpenAI WithData API does not allow to send empty array of stop sequences
// Gives back "Validation error at #/stop/str: Input should be a valid string\nValidation error at #/stop/list[str]: List should have at least 1 item after validation, not 0"
.setStop(promptExecutionSettings.getStopSequences() == null
|| promptExecutionSettings.getStopSequences().isEmpty() ? null
: promptExecutionSettings.getStopSequences())
: promptExecutionSettings.getStopSequences())
.setUser(promptExecutionSettings.getUser())
.setLogitBias(logit);

Expand DownExpand Up@@ -1147,7 +1149,7 @@ private static OpenAIToolCallConfig getToolCallBehaviorConfig(
toolChoice,
toolCallBehavior.isAutoInvokeAllowed()
&& requestIndex < Math.min(MAXIMUM_INFLIGHT_AUTO_INVOKES,
toolCallBehavior.getMaximumAutoInvokeAttempts()),
toolCallBehavior.getMaximumAutoInvokeAttempts()),
null);
}

Expand DownExpand Up@@ -1262,11 +1264,11 @@ private static ChatRequestAssistantMessage formAssistantMessage(

String args = arguments != null && !arguments.isEmpty()
? arguments.entrySet().stream()
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
.map(entry -> String.format("\"%s\": \"%s\"",
StringEscapeUtils.escapeJson(entry.getKey()),
StringEscapeUtils.escapeJson(
entry.getValue().toPromptString())))
.collect(Collectors.joining(",", "{", "}"))
: "{}";

String prefix = "";
Expand Down
Loading