Add Tool Argument Augmentation for dynamic tool schema enhancement #3116
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build + Deploy on development branches | |
| on: | |
| push: | |
| branches: | |
| - 'main' | |
| - '[0-9].[0-9].x' | |
| schedule: | |
| - cron: '30 11 * * 1-5' # 12:30 PM CET / 6:30 AM | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow_ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build-all: | |
| name: Build all modules | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Setup Maven Build-Cache (~/.m2/build-cache) | |
| if: ${{ github.event_name != 'schedule' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/build-cache | |
| key: build-cache-${{ runner.os }}-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| build-cache-${{ runner.os }}- | |
| - name: Build all modules with unit tests | |
| run: | | |
| ./mvnw --batch-mode -ntp --update-snapshots clean install | |
| - name: Upload Spring-AI Built Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| path: ~/.m2/repository/org/springframework/ai | |
| retention-days: 1 # Intent is to share only with downstream jobs in this workflow | |
| - name: Purge Spring AI Built Artifacts # We don't want the setup-java m2 cache to capture our products, only our deps | |
| run: | | |
| rm -fr ~/.m2/repository/org/springframework/ai | |
| test-ollama: | |
| name: Test Ollama | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| runs-on: ubuntu-latest | |
| needs: build-all | |
| services: | |
| ollama: | |
| image: ollama/ollama:latest | |
| ports: | |
| - 11434:11434 | |
| env: | |
| OLLAMA_WITH_REUSE: true | |
| OLLAMA_AUTOCONF_TESTS_ENABLED: "true" | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Setup Maven Build-Cache (~/.m2/build-cache) | |
| uses: actions/cache@v4 | |
| if: ${{ github.event_name != 'schedule' }} | |
| with: | |
| path: ~/.m2/build-cache | |
| key: build-cache-${{ runner.os }}-ollama-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| build-cache-${{ runner.os }}- | |
| - name: Download Spring-AI Built Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| path: ~/.m2/repository/org/springframework/ai | |
| - name: Configure Testcontainers | |
| run: | | |
| echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties | |
| - name: Test Ollama modules | |
| env: | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| run: | | |
| ./mvnw --batch-mode -ntp --no-snapshot-updates \ | |
| -pl models/spring-ai-ollama,auto-configurations/models/spring-ai-autoconfigure-model-ollama \ | |
| -Pci-fast-integration-tests \ | |
| -Dfailsafe.rerunFailingTestsCount=3 \ | |
| verify | |
| test-openai: | |
| name: Test OpenAI | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| runs-on: ubuntu-latest | |
| needs: build-all | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Setup Maven Build-Cache (~/.m2/build-cache) | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/build-cache | |
| key: build-cache-${{ runner.os }}-openai-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| build-cache-${{ runner.os }}- | |
| - name: Download Spring-AI Built Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| path: ~/.m2/repository/org/springframework/ai | |
| - name: Configure Testcontainers | |
| run: | | |
| echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties | |
| - name: Test OpenAI modules | |
| env: | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| run: | | |
| ./mvnw --batch-mode -ntp --no-snapshot-updates \ | |
| -pl models/spring-ai-openai,auto-configurations/models/spring-ai-autoconfigure-model-openai \ | |
| -Pci-fast-integration-tests \ | |
| -Dfailsafe.rerunFailingTestsCount=3 \ | |
| verify | |
| test-remaining: | |
| name: Test Remaining (MCP, Google GenAI, Chroma, PgVector) | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| runs-on: ubuntu-latest | |
| needs: build-all | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Setup Maven Build-Cache (~/.m2/build-cache) | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/build-cache | |
| key: build-cache-${{ runner.os }}-other-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| build-cache-${{ runner.os }}- | |
| - name: Download Spring-AI Built Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| path: ~/.m2/repository/org/springframework/ai | |
| - name: Configure Testcontainers | |
| run: | | |
| echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties | |
| - name: Test remaining modules | |
| env: | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| run: | | |
| ./mvnw --batch-mode -ntp --no-snapshot-updates \ | |
| -pl models/spring-ai-google-genai,auto-configurations/models/spring-ai-autoconfigure-model-google-genai,mcp/common,mcp/mcp-annotations-spring,auto-configurations/mcp/spring-ai-autoconfigure-mcp-client-common,auto-configurations/mcp/spring-ai-autoconfigure-mcp-client-httpclient,auto-configurations/mcp/spring-ai-autoconfigure-mcp-client-webflux,auto-configurations/mcp/spring-ai-autoconfigure-mcp-server-common,auto-configurations/mcp/spring-ai-autoconfigure-mcp-server-webmvc,auto-configurations/mcp/spring-ai-autoconfigure-mcp-server-webflux,vector-stores/spring-ai-chroma-store,vector-stores/spring-ai-pgvector-store,spring-ai-integration-tests \ | |
| -Pci-fast-integration-tests \ | |
| -Dfailsafe.rerunFailingTestsCount=3 \ | |
| verify | |
| handle-documentation: | |
| name: Generate and upload javadocs, trigger antora reference doc | |
| if: ${{ github.repository_owner == 'spring-projects' && github.event_name != 'schedule'}} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| actions: write | |
| needs: [build-all, test-ollama, test-openai, test-remaining] | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Trigger Antora build | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: gh workflow run deploy-docs.yml -r docs-build | |
| - name: Set up JDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| # NOT setting up maven build-cache b/c javadoc:aggregate-jar is forking lifecyle and can't benefit from it anyway | |
| - name: Generate Java docs | |
| run: ./mvnw --batch-mode -ntp javadoc:aggregate-jar | |
| - name: Capture project version | |
| run: echo PROJECT_VERSION=$(./mvnw help:evaluate -Dexpression=project.version --quiet -DforceStdout) >> $GITHUB_ENV | |
| - name: Setup SSH key | |
| run: | | |
| mkdir "$HOME/.ssh" | |
| echo "${{ secrets.DOCS_SSH_KEY }}" > "$HOME/.ssh/key" | |
| chmod 600 "$HOME/.ssh/key" | |
| echo "${{ secrets.DOCS_SSH_HOST_KEY }}" > "$HOME/.ssh/known_hosts" | |
| - name: Deploy docs | |
| run: | | |
| ssh -i $HOME/.ssh/key ${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }} "cd ${{ secrets.DOCS_PATH }} && rm -fr $PROJECT_VERSION && mkdir -p $PROJECT_VERSION" | |
| scp -i $HOME/.ssh/key target/spring-ai-parent-${PROJECT_VERSION}-javadoc.jar ${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }}:${{ secrets.DOCS_PATH }}/$PROJECT_VERSION | |
| ssh -i $HOME/.ssh/key ${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }} "cd ${{ secrets.DOCS_PATH }}/${PROJECT_VERSION} && unzip spring-ai-parent-${PROJECT_VERSION}-javadoc.jar -d api && rm spring-ai-parent-${PROJECT_VERSION}-javadoc.jar" | |
| deploy-artifactory: | |
| name: Deploy to Artifactory | |
| runs-on: ubuntu-latest | |
| needs: [build-all, test-ollama, test-openai, test-remaining] | |
| if: ${{ github.repository_owner == 'spring-projects' && github.event_name != 'schedule' }} | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Setup Maven Build-Cache (~/.m2/build-cache) | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/build-cache | |
| key: build-cache-${{ runner.os }}-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| build-cache-${{ runner.os }}- | |
| - name: Deploy to Artifactory | |
| env: | |
| ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} | |
| ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} | |
| run: | | |
| ./mvnw -s settings.xml --batch-mode -ntp -Dmaven.test.skip deploy |