Add a new ai project with spring-ai (#174)
* Add a new ai project with spring-ai * Interface changes. * Some updates. * Update README.md * update. * fix the model name.
This commit is contained in:
Родитель
e562e787a3
Коммит
fbc4469127
|
@ -29,7 +29,7 @@ This training lab requires the following to be installed on your machine:
|
||||||
|
|
||||||
* The Bash shell. While Azure CLI should behave identically on all environments, shell semantics vary. Therefore, only bash can be used with the commands in this training. To complete this training on Windows, use [Git Bash that accompanies the Windows distribution of Git](https://git-scm.com/download/win). **Use only Git Bash to complete this training on Windows. Do not use WSL, CloudShell, or any other shell.**
|
* The Bash shell. While Azure CLI should behave identically on all environments, shell semantics vary. Therefore, only bash can be used with the commands in this training. To complete this training on Windows, use [Git Bash that accompanies the Windows distribution of Git](https://git-scm.com/download/win). **Use only Git Bash to complete this training on Windows. Do not use WSL, CloudShell, or any other shell.**
|
||||||
|
|
||||||
* [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest&WT.mc_id=java-spring-judubois) version 2.50.0 or later. You can check the version of your current Azure CLI installation by running:
|
* [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest&WT.mc_id=java-spring-judubois) version 2.51.0 or later. You can check the version of your current Azure CLI installation by running:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
az --version
|
az --version
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
# 13 - Bulid a Spring-AI microservice with Azure OpenAI
|
||||||
|
|
||||||
|
## Prepare Azure OpenAI Service
|
||||||
|
|
||||||
|
1. Use the following commands to define variables:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOCATION="eastus"
|
||||||
|
OPENAI_RESOURCE_NAME="<Azure-OpenAI-resource-name>"
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Run the following command to create an Azure OpenAI resource in the the resource group.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
az cognitiveservices account create \
|
||||||
|
-n ${OPENAI_RESOURCE_NAME} \
|
||||||
|
-l ${LOCATION} \
|
||||||
|
--kind OpenAI \
|
||||||
|
--sku s0 \
|
||||||
|
--custom-domain ${OPENAI_RESOURCE_NAME}
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Create the model deployments for `text-embedding-ada-002` and `gpt-35-turbo-16k` in your Azure OpenAI service.
|
||||||
|
```bash
|
||||||
|
az cognitiveservices account deployment create \
|
||||||
|
-n ${OPENAI_RESOURCE_NAME} \
|
||||||
|
--deployment-name text-embedding-ada-002 \
|
||||||
|
--model-name text-embedding-ada-002 \
|
||||||
|
--model-version "2" \
|
||||||
|
--model-format OpenAI
|
||||||
|
|
||||||
|
az cognitiveservices account deployment create \
|
||||||
|
-n ${OPENAI_RESOURCE_NAME} \
|
||||||
|
--deployment-name gpt-35-turbo-16k \
|
||||||
|
--model-name gpt-35-turbo-16k \
|
||||||
|
--model-version "0613" \
|
||||||
|
--model-format OpenAI \
|
||||||
|
--sku Standard \
|
||||||
|
--capacity 120
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Retrieve the endpoint and API key of your Azure OpenAI resource, following [this doc](https://learn.microsoft.com/en-us/azure/ai-services/openai/quickstart?pivots=programming-language-java).
|
||||||
|
|
||||||
|
|
||||||
|
## Run in local
|
||||||
|
|
||||||
|
1. Export the environment variables required by the `spring-ai`:
|
||||||
|
```shell
|
||||||
|
export SPRING_AI_AZURE_OPENAI_API_KEY=<INSERT_KEY_HERE>
|
||||||
|
export SPRING_AI_AZURE_OPENAI_ENDPOINT=<INSERT_ENDPOINT_URL_HERE>
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Start the service by running `mvn spring-boot:run`.
|
||||||
|
|
||||||
|
1. Open the browser at `http://localhost:8080`
|
||||||
|
|
||||||
|
|
||||||
|
## Deploy to Azure Spring Apps
|
||||||
|
1. Use the following command to specify the app name on Azure Spring Apps and to allocate required resources:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
az spring app create \
|
||||||
|
--name ai-weather-service \
|
||||||
|
--cpu 2 \
|
||||||
|
--memory 4Gi \
|
||||||
|
--min-replicas 2 \
|
||||||
|
--max-replicas 2 \
|
||||||
|
--assign-endpoint true
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Build the jar package by `mvn clean package`.
|
||||||
|
|
||||||
|
1. Use the following command to deploy the *.jar* file for the app:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
az spring app deploy \
|
||||||
|
--name ai-weather-service \
|
||||||
|
--artifact-path target/demo-0.0.1-SNAPSHOT.jar \
|
||||||
|
--env SPRING_AI_AZURE_OPENAI_API_KEY=${SPRING_AI_AZURE_OPENAI_API_KEY} SPRING_AI_AZURE_OPENAI_ENDPOINT=${SPRING_AI_AZURE_OPENAI_ENDPOINT} \
|
||||||
|
--runtime-version Java_17
|
||||||
|
```
|
33
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/.gitignore
поставляемый
Normal file
33
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/.gitignore
поставляемый
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
HELP.md
|
||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### STS ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
Двоичные данные
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/.mvn/wrapper/maven-wrapper.jar
поставляемый
Normal file
Двоичные данные
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/.mvn/wrapper/maven-wrapper.jar
поставляемый
Normal file
Двоичный файл не отображается.
2
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/.mvn/wrapper/maven-wrapper.properties
поставляемый
Normal file
2
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/.mvn/wrapper/maven-wrapper.properties
поставляемый
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
|
||||||
|
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
|
305
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/mvnw
поставляемый
Executable file
305
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/mvnw
поставляемый
Executable file
|
@ -0,0 +1,305 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Maven2 Start Up Batch script
|
||||||
|
#
|
||||||
|
# Required ENV vars:
|
||||||
|
# ------------------
|
||||||
|
# JAVA_HOME - location of a JDK home dir
|
||||||
|
#
|
||||||
|
# Optional ENV vars
|
||||||
|
# -----------------
|
||||||
|
# M2_HOME - location of maven2's installed home dir
|
||||||
|
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||||
|
# e.g. to debug Maven itself, use
|
||||||
|
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||||
|
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if [ -z "$MAVEN_SKIP_RC" ] ; then
|
||||||
|
|
||||||
|
if [ -f /etc/mavenrc ] ; then
|
||||||
|
. /etc/mavenrc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$HOME/.mavenrc" ] ; then
|
||||||
|
. "$HOME/.mavenrc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# OS specific support. $var _must_ be set to either true or false.
|
||||||
|
cygwin=false;
|
||||||
|
darwin=false;
|
||||||
|
mingw=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN*) cygwin=true ;;
|
||||||
|
MINGW*) mingw=true;;
|
||||||
|
Darwin*) darwin=true
|
||||||
|
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
|
||||||
|
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
|
||||||
|
if [ -z "$JAVA_HOME" ]; then
|
||||||
|
if [ -x "/usr/libexec/java_home" ]; then
|
||||||
|
export JAVA_HOME="`/usr/libexec/java_home`"
|
||||||
|
else
|
||||||
|
export JAVA_HOME="/Library/Java/Home"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$JAVA_HOME" ] ; then
|
||||||
|
if [ -r /etc/gentoo-release ] ; then
|
||||||
|
JAVA_HOME=`java-config --jre-home`
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$M2_HOME" ] ; then
|
||||||
|
## resolve links - $0 may be a link to maven's home
|
||||||
|
PRG="$0"
|
||||||
|
|
||||||
|
# need this for relative symlinks
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG="`dirname "$PRG"`/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
saveddir=`pwd`
|
||||||
|
|
||||||
|
M2_HOME=`dirname "$PRG"`/..
|
||||||
|
|
||||||
|
# make it fully qualified
|
||||||
|
M2_HOME=`cd "$M2_HOME" && pwd`
|
||||||
|
|
||||||
|
cd "$saveddir"
|
||||||
|
# echo Using m2 at $M2_HOME
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin, ensure paths are in UNIX format before anything is touched
|
||||||
|
if $cygwin ; then
|
||||||
|
[ -n "$M2_HOME" ] &&
|
||||||
|
M2_HOME=`cygpath --unix "$M2_HOME"`
|
||||||
|
[ -n "$JAVA_HOME" ] &&
|
||||||
|
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||||
|
[ -n "$CLASSPATH" ] &&
|
||||||
|
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Mingw, ensure paths are in UNIX format before anything is touched
|
||||||
|
if $mingw ; then
|
||||||
|
[ -n "$M2_HOME" ] &&
|
||||||
|
M2_HOME="`(cd "$M2_HOME"; pwd)`"
|
||||||
|
[ -n "$JAVA_HOME" ] &&
|
||||||
|
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$JAVA_HOME" ]; then
|
||||||
|
javaExecutable="`which javac`"
|
||||||
|
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
|
||||||
|
# readlink(1) is not available as standard on Solaris 10.
|
||||||
|
readLink=`which readlink`
|
||||||
|
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
|
||||||
|
if $darwin ; then
|
||||||
|
javaHome="`dirname \"$javaExecutable\"`"
|
||||||
|
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
|
||||||
|
else
|
||||||
|
javaExecutable="`readlink -f \"$javaExecutable\"`"
|
||||||
|
fi
|
||||||
|
javaHome="`dirname \"$javaExecutable\"`"
|
||||||
|
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
|
||||||
|
JAVA_HOME="$javaHome"
|
||||||
|
export JAVA_HOME
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$JAVACMD" ] ; then
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="`which java`"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
echo "Error: JAVA_HOME is not defined correctly." >&2
|
||||||
|
echo " We cannot execute $JAVACMD" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$JAVA_HOME" ] ; then
|
||||||
|
echo "Warning: JAVA_HOME environment variable is not set."
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
|
||||||
|
|
||||||
|
# traverses directory structure from process work directory to filesystem root
|
||||||
|
# first directory with .mvn subdirectory is considered project base directory
|
||||||
|
find_maven_basedir() {
|
||||||
|
|
||||||
|
if [ -z "$1" ]
|
||||||
|
then
|
||||||
|
echo "Path not specified to find_maven_basedir"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
basedir="$1"
|
||||||
|
wdir="$1"
|
||||||
|
while [ "$wdir" != '/' ] ; do
|
||||||
|
if [ -d "$wdir"/.mvn ] ; then
|
||||||
|
basedir=$wdir
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
|
||||||
|
if [ -d "${wdir}" ]; then
|
||||||
|
wdir=`cd "$wdir/.."; pwd`
|
||||||
|
fi
|
||||||
|
# end of workaround
|
||||||
|
done
|
||||||
|
echo "${basedir}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# concatenates all lines of a file
|
||||||
|
concat_lines() {
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
echo "$(tr -s '\n' ' ' < "$1")"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
BASE_DIR=`find_maven_basedir "$(pwd)"`
|
||||||
|
if [ -z "$BASE_DIR" ]; then
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
##########################################################################################
|
||||||
|
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||||
|
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||||
|
##########################################################################################
|
||||||
|
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
|
||||||
|
fi
|
||||||
|
if [ "$MVNW_REPOURL" = true]; then
|
||||||
|
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
|
||||||
|
else
|
||||||
|
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
|
||||||
|
fi
|
||||||
|
while IFS="=" read key value; do
|
||||||
|
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
|
||||||
|
esac
|
||||||
|
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Downloading from: $jarUrl"
|
||||||
|
fi
|
||||||
|
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
|
||||||
|
if $cygwin; then
|
||||||
|
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v wget > /dev/null; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Found wget ... using wget"
|
||||||
|
fi
|
||||||
|
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||||
|
wget "$jarUrl" -O "$wrapperJarPath"
|
||||||
|
else
|
||||||
|
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
|
||||||
|
fi
|
||||||
|
elif command -v curl > /dev/null; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Found curl ... using curl"
|
||||||
|
fi
|
||||||
|
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||||
|
curl -o "$wrapperJarPath" "$jarUrl" -f
|
||||||
|
else
|
||||||
|
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Falling back to using Java to download"
|
||||||
|
fi
|
||||||
|
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||||
|
# For Cygwin, switch paths to Windows format before running javac
|
||||||
|
if $cygwin; then
|
||||||
|
javaClass=`cygpath --path --windows "$javaClass"`
|
||||||
|
fi
|
||||||
|
if [ -e "$javaClass" ]; then
|
||||||
|
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo " - Compiling MavenWrapperDownloader.java ..."
|
||||||
|
fi
|
||||||
|
# Compiling the Java class
|
||||||
|
("$JAVA_HOME/bin/javac" "$javaClass")
|
||||||
|
fi
|
||||||
|
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||||
|
# Running the downloader
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo " - Running MavenWrapperDownloader.java ..."
|
||||||
|
fi
|
||||||
|
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
##########################################################################################
|
||||||
|
# End of extension
|
||||||
|
##########################################################################################
|
||||||
|
|
||||||
|
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo $MAVEN_PROJECTBASEDIR
|
||||||
|
fi
|
||||||
|
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
|
||||||
|
|
||||||
|
# For Cygwin, switch paths to Windows format before running java
|
||||||
|
if $cygwin; then
|
||||||
|
[ -n "$M2_HOME" ] &&
|
||||||
|
M2_HOME=`cygpath --path --windows "$M2_HOME"`
|
||||||
|
[ -n "$JAVA_HOME" ] &&
|
||||||
|
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
|
||||||
|
[ -n "$CLASSPATH" ] &&
|
||||||
|
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
|
||||||
|
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
|
||||||
|
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
|
||||||
|
fi
|
||||||
|
|
||||||
|
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||||
|
|
||||||
|
exec "$JAVACMD" \
|
||||||
|
$MAVEN_OPTS \
|
||||||
|
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||||
|
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||||
|
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
172
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/mvnw.cmd
поставляемый
Executable file
172
13-bulid-a-spring-ai-microservice-with-azure-openai/ai-weather-service/mvnw.cmd
поставляемый
Executable file
|
@ -0,0 +1,172 @@
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
@REM or more contributor license agreements. See the NOTICE file
|
||||||
|
@REM distributed with this work for additional information
|
||||||
|
@REM regarding copyright ownership. The ASF licenses this file
|
||||||
|
@REM to you under the Apache License, Version 2.0 (the
|
||||||
|
@REM "License"); you may not use this file except in compliance
|
||||||
|
@REM with the License. You may obtain a copy of the License at
|
||||||
|
@REM
|
||||||
|
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@REM
|
||||||
|
@REM Unless required by applicable law or agreed to in writing,
|
||||||
|
@REM software distributed under the License is distributed on an
|
||||||
|
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
@REM KIND, either express or implied. See the License for the
|
||||||
|
@REM specific language governing permissions and limitations
|
||||||
|
@REM under the License.
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
@REM Maven2 Start Up Batch script
|
||||||
|
@REM
|
||||||
|
@REM Required ENV vars:
|
||||||
|
@REM JAVA_HOME - location of a JDK home dir
|
||||||
|
@REM
|
||||||
|
@REM Optional ENV vars
|
||||||
|
@REM M2_HOME - location of maven2's installed home dir
|
||||||
|
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
|
||||||
|
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
|
||||||
|
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||||
|
@REM e.g. to debug Maven itself, use
|
||||||
|
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||||
|
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
|
||||||
|
@echo off
|
||||||
|
@REM set title of command window
|
||||||
|
title %0
|
||||||
|
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
|
||||||
|
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
|
||||||
|
|
||||||
|
@REM set %HOME% to equivalent of $HOME
|
||||||
|
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
|
||||||
|
|
||||||
|
@REM Execute a user defined script before this one
|
||||||
|
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
|
||||||
|
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
|
||||||
|
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
|
||||||
|
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
|
||||||
|
:skipRcPre
|
||||||
|
|
||||||
|
@setlocal
|
||||||
|
|
||||||
|
set ERROR_CODE=0
|
||||||
|
|
||||||
|
@REM To isolate internal variables from possible post scripts, we use another setlocal
|
||||||
|
@setlocal
|
||||||
|
|
||||||
|
@REM ==== START VALIDATION ====
|
||||||
|
if not "%JAVA_HOME%" == "" goto OkJHome
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Error: JAVA_HOME not found in your environment. >&2
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||||
|
echo location of your Java installation. >&2
|
||||||
|
echo.
|
||||||
|
goto error
|
||||||
|
|
||||||
|
:OkJHome
|
||||||
|
if exist "%JAVA_HOME%\bin\java.exe" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Error: JAVA_HOME is set to an invalid directory. >&2
|
||||||
|
echo JAVA_HOME = "%JAVA_HOME%" >&2
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||||
|
echo location of your Java installation. >&2
|
||||||
|
echo.
|
||||||
|
goto error
|
||||||
|
|
||||||
|
@REM ==== END VALIDATION ====
|
||||||
|
|
||||||
|
:init
|
||||||
|
|
||||||
|
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
|
||||||
|
@REM Fallback to current working directory if not found.
|
||||||
|
|
||||||
|
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
|
||||||
|
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
|
||||||
|
|
||||||
|
set EXEC_DIR=%CD%
|
||||||
|
set WDIR=%EXEC_DIR%
|
||||||
|
:findBaseDir
|
||||||
|
IF EXIST "%WDIR%"\.mvn goto baseDirFound
|
||||||
|
cd ..
|
||||||
|
IF "%WDIR%"=="%CD%" goto baseDirNotFound
|
||||||
|
set WDIR=%CD%
|
||||||
|
goto findBaseDir
|
||||||
|
|
||||||
|
:baseDirFound
|
||||||
|
set MAVEN_PROJECTBASEDIR=%WDIR%
|
||||||
|
cd "%EXEC_DIR%"
|
||||||
|
goto endDetectBaseDir
|
||||||
|
|
||||||
|
:baseDirNotFound
|
||||||
|
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
|
||||||
|
cd "%EXEC_DIR%"
|
||||||
|
|
||||||
|
:endDetectBaseDir
|
||||||
|
|
||||||
|
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
|
||||||
|
|
||||||
|
@setlocal EnableExtensions EnableDelayedExpansion
|
||||||
|
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
|
||||||
|
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
|
||||||
|
|
||||||
|
:endReadAdditionalConfig
|
||||||
|
|
||||||
|
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
|
||||||
|
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
|
||||||
|
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||||
|
|
||||||
|
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
|
||||||
|
|
||||||
|
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
|
||||||
|
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
|
||||||
|
)
|
||||||
|
|
||||||
|
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||||
|
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||||
|
if exist %WRAPPER_JAR% (
|
||||||
|
echo Found %WRAPPER_JAR%
|
||||||
|
) else (
|
||||||
|
if not "%MVNW_REPOURL%" == "" (
|
||||||
|
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
|
||||||
|
)
|
||||||
|
echo Couldn't find %WRAPPER_JAR%, downloading it ...
|
||||||
|
echo Downloading from: %DOWNLOAD_URL%
|
||||||
|
|
||||||
|
powershell -Command "&{"^
|
||||||
|
"$webclient = new-object System.Net.WebClient;"^
|
||||||
|
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
|
||||||
|
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
|
||||||
|
"}"^
|
||||||
|
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
|
||||||
|
"}"
|
||||||
|
echo Finished downloading %WRAPPER_JAR%
|
||||||
|
)
|
||||||
|
@REM End of extension
|
||||||
|
|
||||||
|
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
|
||||||
|
if ERRORLEVEL 1 goto error
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:error
|
||||||
|
set ERROR_CODE=1
|
||||||
|
|
||||||
|
:end
|
||||||
|
@endlocal & set ERROR_CODE=%ERROR_CODE%
|
||||||
|
|
||||||
|
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
|
||||||
|
@REM check for post script, once with legacy .bat ending and once with .cmd ending
|
||||||
|
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
|
||||||
|
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
|
||||||
|
:skipRcPost
|
||||||
|
|
||||||
|
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
|
||||||
|
if "%MAVEN_BATCH_PAUSE%" == "on" pause
|
||||||
|
|
||||||
|
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
|
||||||
|
|
||||||
|
exit /B %ERROR_CODE%
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>3.1.3</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
<groupId>com.example</groupId>
|
||||||
|
<artifactId>demo</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<name>demo</name>
|
||||||
|
<description>Demo project for Spring Boot</description>
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.experimental.ai</groupId>
|
||||||
|
<artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
|
||||||
|
<version>0.2.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>spring-snapshots</id>
|
||||||
|
<name>Spring Snapshots</name>
|
||||||
|
<url>https://repo.spring.io/snapshot</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</releases>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
</project>
|
|
@ -0,0 +1,48 @@
|
||||||
|
package com.example.demo;
|
||||||
|
|
||||||
|
import org.springframework.ai.client.AiClient;
|
||||||
|
import org.springframework.ai.client.Generation;
|
||||||
|
import org.springframework.ai.prompt.Prompt;
|
||||||
|
import org.springframework.ai.prompt.PromptTemplate;
|
||||||
|
import org.springframework.ai.prompt.SystemPromptTemplate;
|
||||||
|
import org.springframework.ai.prompt.messages.Message;
|
||||||
|
import org.springframework.ai.prompt.messages.UserMessage;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.core.io.Resource;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(path = "/weather")
|
||||||
|
public class AiWeatherController {
|
||||||
|
|
||||||
|
private final AiClient aiClient;
|
||||||
|
|
||||||
|
@Value("classpath:/prompts/weather-service.st")
|
||||||
|
private Resource weatherServiceTemplate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public AiWeatherController(AiClient aiClient) {
|
||||||
|
this.aiClient = aiClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/ask")
|
||||||
|
public List<Generation> askAi(@RequestParam String question) {
|
||||||
|
PromptTemplate systemMessageTemplate = new SystemPromptTemplate(weatherServiceTemplate);
|
||||||
|
String weatherHistory = WeatherData.BASEL;
|
||||||
|
Message systemMessage = systemMessageTemplate.createMessage(Map.of(
|
||||||
|
"today", LocalDate.now().toString(),
|
||||||
|
"city", "Basel",
|
||||||
|
"weatherHistory", weatherHistory));
|
||||||
|
Prompt prompt = new Prompt(List.of(systemMessage, new UserMessage(question)));
|
||||||
|
List<Generation> response = aiClient.generate(prompt).getGenerations();
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.example.demo;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class DemoApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(DemoApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,373 @@
|
||||||
|
package com.example.demo;
|
||||||
|
|
||||||
|
public class WeatherData {
|
||||||
|
public static final String BASEL = """
|
||||||
|
| Date | Max Temperature(°C) | Min Temperature(°C) | Precipitation(mm) | Relative Humidity(%) | Snowfall Amount(cm) |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| September 1, 2022 | 24.64 | 14.04 | 0 | 72.17 | 0.00 |
|
||||||
|
| September 2, 2022 | 24.65 | 11.40 | 1 | 75.47 | 0.00 |
|
||||||
|
| September 3, 2022 | 22.63 | 15.21 | 2 | 84.14 | 0.00 |
|
||||||
|
| September 4, 2022 | 27.02 | 13.29 | 0 | 73.88 | 0.00 |
|
||||||
|
| September 5, 2022 | 28.52 | 13.95 | 0 | 72.43 | 0.00 |
|
||||||
|
| September 6, 2022 | 23.23 | 17.00 | 3 | 81.50 | 0.00 |
|
||||||
|
| September 7, 2022 | 26.11 | 17.42 | 4 | 81.39 | 0.00 |
|
||||||
|
| September 8, 2022 | 23.01 | 15.64 | 11 | 74.28 | 0.00 |
|
||||||
|
| September 9, 2022 | 21.76 | 15.54 | 1 | 69.21 | 0.00 |
|
||||||
|
| September 10, 2022 | 19.01 | 14.81 | 4 | 78.55 | 0.00 |
|
||||||
|
| September 11, 2022 | 22.39 | 13.66 | 0 | 77.01 | 0.00 |
|
||||||
|
| September 12, 2022 | 25.07 | 10.13 | 0 | 78.03 | 0.00 |
|
||||||
|
| September 13, 2022 | 27.67 | 12.79 | 1 | 73.32 | 0.00 |
|
||||||
|
| September 14, 2022 | 23.58 | 19.04 | 12 | 81.54 | 0.00 |
|
||||||
|
| September 15, 2022 | 19.19 | 16.38 | 16 | 89.90 | 0.00 |
|
||||||
|
| September 16, 2022 | 16.71 | 12.30 | 3 | 82.58 | 0.00 |
|
||||||
|
| September 17, 2022 | 14.53 | 9.52 | 3 | 71.48 | 0.00 |
|
||||||
|
| September 18, 2022 | 16.51 | 7.91 | 0 | 68.52 | 0.00 |
|
||||||
|
| September 19, 2022 | 16.87 | 9.58 | 0 | 59.20 | 0.00 |
|
||||||
|
| September 20, 2022 | 16.72 | 6.49 | 0 | 68.71 | 0.00 |
|
||||||
|
| September 21, 2022 | 18.45 | 5.07 | 0 | 71.17 | 0.00 |
|
||||||
|
| September 22, 2022 | 18.91 | 4.45 | 0 | 71.91 | 0.00 |
|
||||||
|
| September 23, 2022 | 20.50 | 5.55 | 1 | 76.93 | 0.00 |
|
||||||
|
| September 24, 2022 | 17.70 | 11.50 | 6 | 86.37 | 0.00 |
|
||||||
|
| September 25, 2022 | 15.89 | 10.18 | 1 | 90.61 | 0.00 |
|
||||||
|
| September 26, 2022 | 15.30 | 10.49 | 2 | 80.21 | 0.00 |
|
||||||
|
| September 27, 2022 | 12.33 | 10.02 | 13 | 82.84 | 0.00 |
|
||||||
|
| September 28, 2022 | 12.08 | 9.54 | 13 | 88.81 | 0.00 |
|
||||||
|
| September 29, 2022 | 12.54 | 9.07 | 11 | 92.42 | 0.00 |
|
||||||
|
| September 30, 2022 | 15.22 | 8.90 | 0 | 86.48 | 0.00 |
|
||||||
|
| October 1, 2022 | 14.42 | 7.51 | 4 | 88.54 | 0.00 |
|
||||||
|
| October 2, 2022 | 19.25 | 14.23 | 9 | 87.09 | 0.00 |
|
||||||
|
| October 3, 2022 | 16.56 | 9.17 | 1 | 86.72 | 0.00 |
|
||||||
|
| October 4, 2022 | 19.50 | 7.48 | 0 | 84.96 | 0.00 |
|
||||||
|
| October 5, 2022 | 23.32 | 8.67 | 0 | 80.93 | 0.00 |
|
||||||
|
| October 6, 2022 | 18.63 | 11.79 | 0 | 82.86 | 0.00 |
|
||||||
|
| October 7, 2022 | 20.63 | 10.87 | 0 | 84.50 | 0.00 |
|
||||||
|
| October 8, 2022 | 17.41 | 10.90 | 0 | 85.43 | 0.00 |
|
||||||
|
| October 9, 2022 | 17.13 | 6.99 | 0 | 81.55 | 0.00 |
|
||||||
|
| October 10, 2022 | 22.19 | 10.49 | 0 | 81.47 | 0.00 |
|
||||||
|
| October 11, 2022 | 18.16 | 11.94 | 2 | 88.05 | 0.00 |
|
||||||
|
| October 12, 2022 | 18.20 | 11.43 | 0 | 85.33 | 0.00 |
|
||||||
|
| October 13, 2022 | 17.75 | 10.11 | 6 | 90.33 | 0.00 |
|
||||||
|
| October 14, 2022 | 17.52 | 12.65 | 8 | 92.44 | 0.00 |
|
||||||
|
| October 15, 2022 | 19.67 | 14.76 | 5 | 84.51 | 0.00 |
|
||||||
|
| October 16, 2022 | 23.43 | 13.42 | 0 | 85.18 | 0.00 |
|
||||||
|
| October 17, 2022 | 23.40 | 11.18 | 0 | 84.99 | 0.00 |
|
||||||
|
| October 18, 2022 | 22.77 | 13.00 | 0 | 83.32 | 0.00 |
|
||||||
|
| October 19, 2022 | 19.09 | 11.46 | 0 | 90.79 | 0.00 |
|
||||||
|
| October 20, 2022 | 17.78 | 13.26 | 2 | 90.53 | 0.00 |
|
||||||
|
| October 21, 2022 | 17.64 | 14.24 | 15 | 93.04 | 0.00 |
|
||||||
|
| October 22, 2022 | 20.69 | 12.51 | 4 | 87.85 | 0.00 |
|
||||||
|
| October 23, 2022 | 19.20 | 10.73 | 2 | 88.63 | 0.00 |
|
||||||
|
| October 24, 2022 | 18.53 | 12.94 | 5 | 85.25 | 0.00 |
|
||||||
|
| October 25, 2022 | 18.68 | 10.82 | 0 | 86.50 | 0.00 |
|
||||||
|
| October 26, 2022 | 21.76 | 12.40 | 1 | 86.61 | 0.00 |
|
||||||
|
| October 27, 2022 | 21.15 | 10.74 | 0 | 88.30 | 0.00 |
|
||||||
|
| October 28, 2022 | 22.97 | 12.86 | 0 | 82.28 | 0.00 |
|
||||||
|
| October 29, 2022 | 22.27 | 11.26 | 0 | 83.82 | 0.00 |
|
||||||
|
| October 30, 2022 | 21.63 | 10.39 | 0 | 85.33 | 0.00 |
|
||||||
|
| October 31, 2022 | 18.70 | 8.91 | 0 | 87.02 | 0.00 |
|
||||||
|
| November 1, 2022 | 16.64 | 8.77 | 8 | 86.87 | 0.00 |
|
||||||
|
| November 2, 2022 | 16.06 | 6.80 | 0 | 86.36 | 0.00 |
|
||||||
|
| November 3, 2022 | 12.77 | 5.59 | 8 | 91.75 | 0.00 |
|
||||||
|
| November 4, 2022 | 11.22 | 8.03 | 4 | 86.51 | 0.00 |
|
||||||
|
| November 5, 2022 | 10.65 | 2.97 | 0 | 88.72 | 0.00 |
|
||||||
|
| November 6, 2022 | 10.34 | 2.80 | 1 | 87.08 | 0.00 |
|
||||||
|
| November 7, 2022 | 16.38 | 6.34 | 0 | 82.89 | 0.00 |
|
||||||
|
| November 8, 2022 | 16.54 | 4.96 | 0 | 85.18 | 0.00 |
|
||||||
|
| November 9, 2022 | 13.56 | 9.69 | 14 | 92.29 | 0.00 |
|
||||||
|
| November 10, 2022 | 14.01 | 6.32 | 0 | 92.42 | 0.00 |
|
||||||
|
| November 11, 2022 | 12.07 | 4.90 | 0 | 91.25 | 0.00 |
|
||||||
|
| November 12, 2022 | 9.70 | 5.49 | 0 | 91.36 | 0.00 |
|
||||||
|
| November 13, 2022 | 7.42 | 4.29 | 0 | 90.38 | 0.00 |
|
||||||
|
| November 14, 2022 | 12.87 | 4.16 | 1 | 89.05 | 0.00 |
|
||||||
|
| November 15, 2022 | 12.23 | 7.90 | 1 | 89.33 | 0.00 |
|
||||||
|
| November 16, 2022 | 14.02 | 7.24 | 8 | 87.64 | 0.00 |
|
||||||
|
| November 17, 2022 | 14.39 | 8.66 | 8 | 79.07 | 0.00 |
|
||||||
|
| November 18, 2022 | 10.08 | 7.61 | 5 | 87.62 | 0.00 |
|
||||||
|
| November 19, 2022 | 9.79 | 6.21 | 0 | 87.65 | 0.00 |
|
||||||
|
| November 20, 2022 | 8.97 | 5.34 | 2 | 84.32 | 0.00 |
|
||||||
|
| November 21, 2022 | 9.67 | 6.32 | 5 | 84.20 | 0.00 |
|
||||||
|
| November 22, 2022 | 8.91 | 6.43 | 3 | 83.74 | 0.00 |
|
||||||
|
| November 23, 2022 | 10.22 | 1.78 | 4 | 84.82 | 0.00 |
|
||||||
|
| November 24, 2022 | 11.14 | 3.57 | 2 | 88.88 | 0.00 |
|
||||||
|
| November 25, 2022 | 10.50 | 3.93 | 1 | 92.56 | 0.00 |
|
||||||
|
| November 26, 2022 | 8.57 | 3.02 | 0 | 94.01 | 0.00 |
|
||||||
|
| November 27, 2022 | 7.49 | 1.63 | 0 | 90.68 | 0.00 |
|
||||||
|
| November 28, 2022 | 8.87 | 4.36 | 2 | 87.87 | 0.00 |
|
||||||
|
| November 29, 2022 | 9.18 | 6.45 | 1 | 93.58 | 0.00 |
|
||||||
|
| November 30, 2022 | 7.73 | 5.00 | 3 | 93.22 | 0.00 |
|
||||||
|
| December 1, 2022 | 5.51 | 3.81 | 0 | 87.44 | 0.00 |
|
||||||
|
| December 2, 2022 | 4.91 | 1.81 | 1 | 93.39 | 0.00 |
|
||||||
|
| December 3, 2022 | 3.47 | 1.47 | 0 | 92.10 | 0.00 |
|
||||||
|
| December 4, 2022 | 3.10 | 0.80 | 3 | 90.25 | 0.21 |
|
||||||
|
| December 5, 2022 | 6.21 | 0.18 | 2 | 91.33 | 0.00 |
|
||||||
|
| December 6, 2022 | 4.46 | -0.46 | 0 | 92.86 | 0.00 |
|
||||||
|
| December 7, 2022 | 4.93 | 1.62 | 0 | 90.25 | 0.00 |
|
||||||
|
| December 8, 2022 | 3.51 | -1.95 | 0 | 86.60 | 0.00 |
|
||||||
|
| December 9, 2022 | 1.24 | -1.42 | 1 | 93.94 | 0.84 |
|
||||||
|
| December 10, 2022 | 0.99 | -2.28 | 4 | 94.81 | 3.15 |
|
||||||
|
| December 11, 2022 | -0.53 | -7.13 | 0 | 91.49 | 0.00 |
|
||||||
|
| December 12, 2022 | -2.16 | -7.10 | 0 | 85.27 | 0.00 |
|
||||||
|
| December 13, 2022 | -1.89 | -7.20 | 0 | 81.47 | 0.21 |
|
||||||
|
| December 14, 2022 | 2.32 | -2.38 | 8 | 93.60 | 1.12 |
|
||||||
|
| December 15, 2022 | 1.19 | -0.39 | 4 | 94.86 | 1.40 |
|
||||||
|
| December 16, 2022 | -0.44 | -3.29 | 1 | 85.41 | 1.26 |
|
||||||
|
| December 17, 2022 | -0.92 | -5.38 | 0 | 85.82 | 0.00 |
|
||||||
|
| December 18, 2022 | 0.70 | -4.33 | 0 | 85.13 | 0.00 |
|
||||||
|
| December 19, 2022 | 6.20 | -0.65 | 0 | 84.15 | 0.00 |
|
||||||
|
| December 20, 2022 | 9.15 | 1.82 | 0 | 86.16 | 0.00 |
|
||||||
|
| December 21, 2022 | 11.20 | 7.14 | 7 | 91.73 | 0.00 |
|
||||||
|
| December 22, 2022 | 12.57 | 9.70 | 6 | 80.71 | 0.00 |
|
||||||
|
| December 23, 2022 | 14.33 | 11.62 | 17 | 90.48 | 0.00 |
|
||||||
|
| December 24, 2022 | 13.37 | 9.54 | 2 | 86.23 | 0.00 |
|
||||||
|
| December 25, 2022 | 11.28 | 6.82 | 0 | 94.26 | 0.00 |
|
||||||
|
| December 26, 2022 | 11.51 | 9.21 | 6 | 89.22 | 0.00 |
|
||||||
|
| December 27, 2022 | 9.06 | 3.16 | 0 | 87.79 | 0.00 |
|
||||||
|
| December 28, 2022 | 10.64 | 2.67 | 0 | 80.45 | 0.00 |
|
||||||
|
| December 29, 2022 | 13.29 | 8.86 | 4 | 70.13 | 0.00 |
|
||||||
|
| December 30, 2022 | 13.81 | 4.39 | 4 | 89.52 | 0.00 |
|
||||||
|
| December 31, 2022 | 16.97 | 12.35 | 0 | 76.63 | 0.00 |
|
||||||
|
| January 1, 2023 | 17.23 | 9.03 | 0 | 79.46 | 0.00 |
|
||||||
|
| January 2, 2023 | 14.50 | 7.42 | 3 | 81.08 | 0.00 |
|
||||||
|
| January 3, 2023 | 9.97 | 3.15 | 0 | 94.55 | 0.00 |
|
||||||
|
| January 4, 2023 | 10.72 | 4.50 | 0 | 86.21 | 0.00 |
|
||||||
|
| January 5, 2023 | 12.41 | 8.64 | 1 | 91.14 | 0.00 |
|
||||||
|
| January 6, 2023 | 10.50 | 6.86 | 0 | 90.27 | 0.00 |
|
||||||
|
| January 7, 2023 | 11.09 | 5.57 | 0 | 89.36 | 0.00 |
|
||||||
|
| January 8, 2023 | 9.05 | 4.15 | 8 | 92.80 | 0.00 |
|
||||||
|
| January 9, 2023 | 9.05 | 5.18 | 7 | 84.61 | 0.00 |
|
||||||
|
| January 10, 2023 | 7.52 | 4.78 | 3 | 78.87 | 0.00 |
|
||||||
|
| January 11, 2023 | 9.89 | 7.28 | 2 | 83.60 | 0.00 |
|
||||||
|
| January 12, 2023 | 10.41 | 7.38 | 0 | 75.28 | 0.00 |
|
||||||
|
| January 13, 2023 | 10.72 | 7.62 | 2 | 78.23 | 0.00 |
|
||||||
|
| January 14, 2023 | 10.82 | 6.32 | 4 | 74.99 | 0.00 |
|
||||||
|
| January 15, 2023 | 12.24 | 4.42 | 11 | 78.35 | 0.00 |
|
||||||
|
| January 16, 2023 | 6.83 | 3.59 | 2 | 70.85 | 0.21 |
|
||||||
|
| January 17, 2023 | 3.77 | 0.79 | 5 | 93.10 | 2.52 |
|
||||||
|
| January 18, 2023 | 2.26 | -0.40 | 2 | 90.72 | 1.61 |
|
||||||
|
| January 19, 2023 | 1.82 | -3.11 | 0 | 85.56 | 0.00 |
|
||||||
|
| January 20, 2023 | 1.99 | -3.71 | 0 | 82.33 | 0.14 |
|
||||||
|
| January 21, 2023 | 1.07 | -4.52 | 0 | 81.34 | 0.00 |
|
||||||
|
| January 22, 2023 | 1.74 | -0.73 | 1 | 85.60 | 1.33 |
|
||||||
|
| January 23, 2023 | 3.42 | 0.40 | 0 | 79.14 | 0.00 |
|
||||||
|
| January 24, 2023 | 5.04 | 3.10 | 0 | 79.43 | 0.00 |
|
||||||
|
| January 25, 2023 | 3.60 | 2.28 | 0 | 85.67 | 0.00 |
|
||||||
|
| January 26, 2023 | 2.42 | -0.72 | 0 | 85.13 | 0.07 |
|
||||||
|
| January 27, 2023 | 1.47 | -1.09 | 0 | 83.36 | 0.00 |
|
||||||
|
| January 28, 2023 | 2.92 | -0.11 | 0 | 79.79 | 0.00 |
|
||||||
|
| January 29, 2023 | 2.55 | -2.73 | 0 | 77.87 | 0.00 |
|
||||||
|
| January 30, 2023 | 3.23 | -3.14 | 1 | 84.93 | 0.00 |
|
||||||
|
| January 31, 2023 | 5.15 | -0.43 | 0 | 86.86 | 0.14 |
|
||||||
|
| February 1, 2023 | 6.77 | 2.92 | 1 | 81.04 | 0.00 |
|
||||||
|
| February 2, 2023 | 7.39 | 4.98 | 1 | 78.47 | 0.00 |
|
||||||
|
| February 3, 2023 | 8.40 | 5.27 | 0 | 75.10 | 0.00 |
|
||||||
|
| February 4, 2023 | 8.84 | 2.06 | 4 | 87.25 | 0.00 |
|
||||||
|
| February 5, 2023 | 5.57 | 0.35 | 6 | 93.89 | 0.00 |
|
||||||
|
| February 6, 2023 | 4.99 | 2.01 | 0 | 82.64 | 0.00 |
|
||||||
|
| February 7, 2023 | 4.80 | -3.16 | 0 | 73.65 | 0.00 |
|
||||||
|
| February 8, 2023 | 3.12 | -4.45 | 0 | 70.41 | 0.00 |
|
||||||
|
| February 9, 2023 | 6.03 | -6.12 | 0 | 78.17 | 0.00 |
|
||||||
|
| February 10, 2023 | 6.37 | -5.79 | 0 | 81.59 | 0.00 |
|
||||||
|
| February 11, 2023 | 8.30 | -5.11 | 0 | 78.90 | 0.00 |
|
||||||
|
| February 12, 2023 | 10.20 | -3.11 | 0 | 84.98 | 0.00 |
|
||||||
|
| February 13, 2023 | 9.10 | 0.26 | 0 | 88.30 | 0.00 |
|
||||||
|
| February 14, 2023 | 9.26 | -1.06 | 0 | 86.42 | 0.00 |
|
||||||
|
| February 15, 2023 | 11.37 | -1.44 | 0 | 85.29 | 0.00 |
|
||||||
|
| February 16, 2023 | 13.82 | -0.98 | 0 | 77.58 | 0.00 |
|
||||||
|
| February 17, 2023 | 13.39 | 7.70 | 0 | 74.41 | 0.00 |
|
||||||
|
| February 18, 2023 | 15.06 | 10.19 | 0 | 80.59 | 0.00 |
|
||||||
|
| February 19, 2023 | 11.24 | 8.05 | 0 | 76.55 | 0.00 |
|
||||||
|
| February 20, 2023 | 15.65 | 2.30 | 0 | 76.20 | 0.00 |
|
||||||
|
| February 21, 2023 | 16.64 | 0.54 | 0 | 74.33 | 0.00 |
|
||||||
|
| February 22, 2023 | 13.23 | 1.75 | 2 | 83.88 | 0.00 |
|
||||||
|
| February 23, 2023 | 13.83 | 7.05 | 1 | 89.27 | 0.00 |
|
||||||
|
| February 24, 2023 | 13.38 | 3.79 | 2 | 89.31 | 0.00 |
|
||||||
|
| February 25, 2023 | 9.30 | 1.76 | 3 | 76.78 | 0.00 |
|
||||||
|
| February 26, 2023 | 1.99 | -1.05 | 1 | 63.46 | 0.42 |
|
||||||
|
| February 27, 2023 | 2.86 | -0.10 | 0 | 57.69 | 0.00 |
|
||||||
|
| February 28, 2023 | 2.83 | -1.35 | 0 | 68.63 | 0.07 |
|
||||||
|
| March 1, 2023 | 4.98 | -1.83 | 0 | 74.02 | 0.00 |
|
||||||
|
| March 2, 2023 | 6.32 | 0.74 | 0 | 76.70 | 0.00 |
|
||||||
|
| March 3, 2023 | 8.38 | 0.00 | 0 | 83.23 | 0.00 |
|
||||||
|
| March 4, 2023 | 8.21 | -0.55 | 0 | 79.06 | 0.00 |
|
||||||
|
| March 5, 2023 | 6.89 | 0.19 | 0 | 75.73 | 0.00 |
|
||||||
|
| March 6, 2023 | 6.12 | -0.04 | 0 | 75.06 | 0.00 |
|
||||||
|
| March 7, 2023 | 7.19 | 0.78 | 0 | 63.32 | 0.00 |
|
||||||
|
| March 8, 2023 | 12.87 | 1.72 | 4 | 77.67 | 0.00 |
|
||||||
|
| March 9, 2023 | 15.90 | 10.28 | 5 | 67.86 | 0.00 |
|
||||||
|
| March 10, 2023 | 11.22 | 6.15 | 9 | 77.42 | 0.00 |
|
||||||
|
| March 11, 2023 | 6.50 | 1.65 | 2 | 77.82 | 0.49 |
|
||||||
|
| March 12, 2023 | 13.25 | 3.75 | 1 | 82.37 | 0.00 |
|
||||||
|
| March 13, 2023 | 21.62 | 9.22 | 9 | 68.32 | 0.00 |
|
||||||
|
| March 14, 2023 | 12.45 | 6.13 | 13 | 75.04 | 0.00 |
|
||||||
|
| March 15, 2023 | 9.35 | 0.95 | 1 | 71.28 | 0.07 |
|
||||||
|
| March 16, 2023 | 13.42 | -0.61 | 0 | 70.84 | 0.00 |
|
||||||
|
| March 17, 2023 | 17.38 | 1.70 | 0 | 67.38 | 0.00 |
|
||||||
|
| March 18, 2023 | 17.73 | 3.93 | 0 | 62.32 | 0.00 |
|
||||||
|
| March 19, 2023 | 13.74 | 7.56 | 4 | 74.92 | 0.00 |
|
||||||
|
| March 20, 2023 | 13.74 | 6.39 | 0 | 81.45 | 0.00 |
|
||||||
|
| March 21, 2023 | 16.13 | 2.67 | 0 | 78.41 | 0.00 |
|
||||||
|
| March 22, 2023 | 19.29 | 5.38 | 0 | 68.89 | 0.00 |
|
||||||
|
| March 23, 2023 | 16.55 | 11.24 | 0 | 68.07 | 0.00 |
|
||||||
|
| March 24, 2023 | 14.64 | 9.78 | 7 | 78.67 | 0.00 |
|
||||||
|
| March 25, 2023 | 12.59 | 7.24 | 5 | 74.65 | 0.00 |
|
||||||
|
| March 26, 2023 | 12.60 | 6.48 | 4 | 78.70 | 0.00 |
|
||||||
|
| March 27, 2023 | 7.30 | 3.07 | 2 | 70.63 | 0.00 |
|
||||||
|
| March 28, 2023 | 11.04 | -1.85 | 1 | 69.67 | 0.00 |
|
||||||
|
| March 29, 2023 | 19.71 | 8.00 | 1 | 60.71 | 0.00 |
|
||||||
|
| March 30, 2023 | 16.67 | 12.44 | 1 | 67.27 | 0.00 |
|
||||||
|
| March 31, 2023 | 14.55 | 9.94 | 10 | 69.82 | 0.00 |
|
||||||
|
| April 1, 2023 | 11.33 | 8.07 | 7 | 82.24 | 0.00 |
|
||||||
|
| April 2, 2023 | 12.02 | 7.08 | 3 | 82.64 | 0.00 |
|
||||||
|
| April 3, 2023 | 8.21 | 3.75 | 0 | 68.93 | 0.00 |
|
||||||
|
| April 4, 2023 | 9.76 | -1.28 | 0 | 56.50 | 0.00 |
|
||||||
|
| April 5, 2023 | 10.77 | -0.92 | 0 | 60.84 | 0.00 |
|
||||||
|
| April 6, 2023 | 12.82 | -2.08 | 0 | 59.04 | 0.00 |
|
||||||
|
| April 7, 2023 | 9.37 | 5.62 | 3 | 80.10 | 0.00 |
|
||||||
|
| April 8, 2023 | 12.03 | 5.32 | 1 | 77.72 | 0.00 |
|
||||||
|
| April 9, 2023 | 15.34 | 2.85 | 0 | 68.56 | 0.00 |
|
||||||
|
| April 10, 2023 | 17.50 | 2.37 | 0 | 66.75 | 0.00 |
|
||||||
|
| April 11, 2023 | 14.58 | 9.60 | 4 | 68.05 | 0.00 |
|
||||||
|
| April 12, 2023 | 13.80 | 8.12 | 9 | 83.55 | 0.00 |
|
||||||
|
| April 13, 2023 | 9.67 | 5.45 | 1 | 72.67 | 0.00 |
|
||||||
|
| April 14, 2023 | 14.19 | 2.12 | 0 | 68.80 | 0.00 |
|
||||||
|
| April 15, 2023 | 12.78 | 4.45 | 2 | 77.52 | 0.00 |
|
||||||
|
| April 16, 2023 | 10.17 | 8.30 | 4 | 89.60 | 0.00 |
|
||||||
|
| April 17, 2023 | 13.82 | 7.99 | 3 | 83.87 | 0.00 |
|
||||||
|
| April 18, 2023 | 15.76 | 7.55 | 0 | 76.64 | 0.00 |
|
||||||
|
| April 19, 2023 | 13.49 | 6.45 | 1 | 78.82 | 0.00 |
|
||||||
|
| April 20, 2023 | 9.28 | 4.50 | 2 | 79.45 | 0.00 |
|
||||||
|
| April 21, 2023 | 13.30 | 2.63 | 1 | 85.24 | 0.00 |
|
||||||
|
| April 22, 2023 | 18.55 | 6.51 | 0 | 77.95 | 0.00 |
|
||||||
|
| April 23, 2023 | 19.45 | 9.75 | 6 | 78.57 | 0.00 |
|
||||||
|
| April 24, 2023 | 13.02 | 8.92 | 1 | 70.35 | 0.00 |
|
||||||
|
| April 25, 2023 | 11.32 | 6.29 | 7 | 79.30 | 0.00 |
|
||||||
|
| April 26, 2023 | 15.04 | 3.80 | 0 | 77.00 | 0.00 |
|
||||||
|
| April 27, 2023 | 19.05 | 8.31 | 0 | 72.06 | 0.00 |
|
||||||
|
| April 28, 2023 | 18.74 | 11.88 | 13 | 87.62 | 0.00 |
|
||||||
|
| April 29, 2023 | 19.67 | 12.31 | 0 | 78.06 | 0.00 |
|
||||||
|
| April 30, 2023 | 18.19 | 9.31 | 0 | 72.65 | 0.00 |
|
||||||
|
| May 1, 2023 | 16.10 | 10.66 | 3 | 81.10 | 0.00 |
|
||||||
|
| May 2, 2023 | 17.06 | 8.93 | 0 | 76.30 | 0.00 |
|
||||||
|
| May 3, 2023 | 20.63 | 6.11 | 0 | 72.78 | 0.00 |
|
||||||
|
| May 4, 2023 | 24.54 | 7.47 | 0 | 70.64 | 0.00 |
|
||||||
|
| May 5, 2023 | 22.46 | 14.16 | 4 | 77.06 | 0.00 |
|
||||||
|
| May 6, 2023 | 22.59 | 12.44 | 0 | 76.91 | 0.00 |
|
||||||
|
| May 7, 2023 | 20.32 | 11.53 | 3 | 83.62 | 0.00 |
|
||||||
|
| May 8, 2023 | 19.16 | 14.16 | 4 | 88.59 | 0.00 |
|
||||||
|
| May 9, 2023 | 20.27 | 12.13 | 9 | 88.60 | 0.00 |
|
||||||
|
| May 10, 2023 | 15.47 | 11.59 | 1 | 79.06 | 0.00 |
|
||||||
|
| May 11, 2023 | 14.61 | 10.77 | 3 | 81.64 | 0.00 |
|
||||||
|
| May 12, 2023 | 16.81 | 10.51 | 1 | 83.25 | 0.00 |
|
||||||
|
| May 13, 2023 | 15.73 | 11.05 | 3 | 82.65 | 0.00 |
|
||||||
|
| May 14, 2023 | 17.21 | 10.05 | 3 | 83.49 | 0.00 |
|
||||||
|
| May 15, 2023 | 17.07 | 9.66 | 9 | 86.51 | 0.00 |
|
||||||
|
| May 16, 2023 | 12.43 | 10.53 | 2 | 85.42 | 0.00 |
|
||||||
|
| May 17, 2023 | 14.76 | 7.52 | 0 | 63.35 | 0.00 |
|
||||||
|
| May 18, 2023 | 16.58 | 5.82 | 0 | 66.86 | 0.00 |
|
||||||
|
| May 19, 2023 | 16.36 | 9.32 | 0 | 68.41 | 0.00 |
|
||||||
|
| May 20, 2023 | 18.78 | 11.83 | 0 | 77.39 | 0.00 |
|
||||||
|
| May 21, 2023 | 24.41 | 12.22 | 1 | 78.25 | 0.00 |
|
||||||
|
| May 22, 2023 | 26.09 | 13.98 | 2 | 72.68 | 0.00 |
|
||||||
|
| May 23, 2023 | 21.39 | 15.99 | 0 | 77.70 | 0.00 |
|
||||||
|
| May 24, 2023 | 16.74 | 12.11 | 0 | 69.07 | 0.00 |
|
||||||
|
| May 25, 2023 | 20.64 | 9.82 | 0 | 66.16 | 0.00 |
|
||||||
|
| May 26, 2023 | 24.25 | 10.70 | 0 | 69.86 | 0.00 |
|
||||||
|
| May 27, 2023 | 25.86 | 11.18 | 0 | 61.83 | 0.00 |
|
||||||
|
| May 28, 2023 | 26.14 | 10.39 | 0 | 59.05 | 0.00 |
|
||||||
|
| May 29, 2023 | 26.91 | 10.11 | 0 | 54.88 | 0.00 |
|
||||||
|
| May 30, 2023 | 25.61 | 11.89 | 0 | 54.51 | 0.00 |
|
||||||
|
| May 31, 2023 | 26.99 | 12.25 | 0 | 46.83 | 0.00 |
|
||||||
|
| June 1, 2023 | 27.31 | 11.66 | 0 | 52.92 | 0.00 |
|
||||||
|
| June 2, 2023 | 26.29 | 14.45 | 0 | 52.31 | 0.00 |
|
||||||
|
| June 3, 2023 | 26.78 | 12.24 | 0 | 52.60 | 0.00 |
|
||||||
|
| June 4, 2023 | 26.70 | 12.84 | 1 | 58.63 | 0.00 |
|
||||||
|
| June 5, 2023 | 27.21 | 11.82 | 0 | 48.09 | 0.00 |
|
||||||
|
| June 6, 2023 | 27.19 | 12.36 | 0 | 48.82 | 0.00 |
|
||||||
|
| June 7, 2023 | 27.41 | 12.70 | 0 | 49.61 | 0.00 |
|
||||||
|
| June 8, 2023 | 28.32 | 12.69 | 0 | 53.37 | 0.00 |
|
||||||
|
| June 9, 2023 | 29.60 | 13.27 | 0 | 55.57 | 0.00 |
|
||||||
|
| June 10, 2023 | 29.56 | 15.57 | 0 | 51.67 | 0.00 |
|
||||||
|
| June 11, 2023 | 29.63 | 16.38 | 0 | 52.52 | 0.00 |
|
||||||
|
| June 12, 2023 | 29.81 | 14.14 | 0 | 42.43 | 0.00 |
|
||||||
|
| June 13, 2023 | 28.49 | 13.63 | 0 | 36.92 | 0.00 |
|
||||||
|
| June 14, 2023 | 27.85 | 10.72 | 0 | 37.76 | 0.00 |
|
||||||
|
| June 15, 2023 | 27.69 | 13.88 | 0 | 42.36 | 0.00 |
|
||||||
|
| June 16, 2023 | 28.27 | 13.56 | 0 | 43.33 | 0.00 |
|
||||||
|
| June 17, 2023 | 29.98 | 11.79 | 0 | 40.23 | 0.00 |
|
||||||
|
| June 18, 2023 | 31.30 | 15.24 | 0 | 45.97 | 0.00 |
|
||||||
|
| June 19, 2023 | 30.49 | 19.39 | 0 | 57.35 | 0.00 |
|
||||||
|
| June 20, 2023 | 32.32 | 19.09 | 6 | 69.34 | 0.00 |
|
||||||
|
| June 21, 2023 | 27.75 | 20.12 | 1 | 71.03 | 0.00 |
|
||||||
|
| June 22, 2023 | 29.43 | 18.38 | 12 | 76.47 | 0.00 |
|
||||||
|
| June 23, 2023 | 25.96 | 17.51 | 2 | 65.00 | 0.00 |
|
||||||
|
| June 24, 2023 | 28.92 | 13.08 | 0 | 56.45 | 0.00 |
|
||||||
|
| June 25, 2023 | 31.29 | 13.52 | 0 | 51.80 | 0.00 |
|
||||||
|
| June 26, 2023 | 30.34 | 17.06 | 0 | 52.33 | 0.00 |
|
||||||
|
| June 27, 2023 | 25.74 | 15.84 | 0 | 49.38 | 0.00 |
|
||||||
|
| June 28, 2023 | 27.56 | 14.68 | 0 | 50.46 | 0.00 |
|
||||||
|
| June 29, 2023 | 28.13 | 14.86 | 1 | 56.69 | 0.00 |
|
||||||
|
| June 30, 2023 | 22.08 | 17.98 | 11 | 78.47 | 0.00 |
|
||||||
|
| July 1, 2023 | 23.12 | 15.83 | 1 | 69.17 | 0.00 |
|
||||||
|
| July 2, 2023 | 24.67 | 17.48 | 1 | 64.87 | 0.00 |
|
||||||
|
| July 3, 2023 | 24.36 | 16.64 | 0 | 53.69 | 0.00 |
|
||||||
|
| July 4, 2023 | 26.03 | 16.92 | 0 | 61.68 | 0.00 |
|
||||||
|
| July 5, 2023 | 23.41 | 17.88 | 4 | 62.45 | 0.00 |
|
||||||
|
| July 6, 2023 | 27.54 | 13.98 | 0 | 48.30 | 0.00 |
|
||||||
|
| July 7, 2023 | 32.56 | 13.10 | 0 | 49.24 | 0.00 |
|
||||||
|
| July 8, 2023 | 31.45 | 19.66 | 1 | 55.91 | 0.00 |
|
||||||
|
| July 9, 2023 | 35.51 | 18.01 | 0 | 50.86 | 0.00 |
|
||||||
|
| July 10, 2023 | 32.15 | 21.35 | 0 | 61.79 | 0.00 |
|
||||||
|
| July 11, 2023 | 36.15 | 19.68 | 5 | 57.72 | 0.00 |
|
||||||
|
| July 12, 2023 | 26.92 | 20.84 | 2 | 73.22 | 0.00 |
|
||||||
|
| July 13, 2023 | 26.70 | 17.28 | 0 | 54.89 | 0.00 |
|
||||||
|
| July 14, 2023 | 30.90 | 13.55 | 0 | 53.38 | 0.00 |
|
||||||
|
| July 15, 2023 | 32.99 | 17.84 | 9 | 56.70 | 0.00 |
|
||||||
|
| July 16, 2023 | 25.05 | 16.97 | 4 | 67.51 | 0.00 |
|
||||||
|
| July 17, 2023 | 26.93 | 18.89 | 0 | 54.24 | 0.00 |
|
||||||
|
| July 18, 2023 | 27.54 | 15.95 | 3 | 62.12 | 0.00 |
|
||||||
|
| July 19, 2023 | 29.59 | 19.88 | 1 | 59.98 | 0.00 |
|
||||||
|
| July 20, 2023 | 27.08 | 16.99 | 0 | 49.10 | 0.00 |
|
||||||
|
| July 21, 2023 | 24.24 | 15.44 | 2 | 60.92 | 0.00 |
|
||||||
|
| July 22, 2023 | 27.16 | 13.70 | 0 | 53.27 | 0.00 |
|
||||||
|
| July 23, 2023 | 28.89 | 14.26 | 0 | 52.64 | 0.00 |
|
||||||
|
| July 24, 2023 | 23.39 | 17.74 | 9 | 77.94 | 0.00 |
|
||||||
|
| July 25, 2023 | 20.71 | 14.84 | 13 | 79.19 | 0.00 |
|
||||||
|
| July 26, 2023 | 20.58 | 12.93 | 1 | 73.22 | 0.00 |
|
||||||
|
| July 27, 2023 | 25.82 | 12.35 | 0 | 68.42 | 0.00 |
|
||||||
|
| July 28, 2023 | 25.32 | 16.55 | 2 | 76.90 | 0.00 |
|
||||||
|
| July 29, 2023 | 26.05 | 17.82 | 4 | 80.77 | 0.00 |
|
||||||
|
| July 30, 2023 | 24.40 | 15.96 | 3 | 69.28 | 0.00 |
|
||||||
|
| July 31, 2023 | 25.33 | 12.58 | 0 | 63.86 | 0.00 |
|
||||||
|
| August 1, 2023 | 21.45 | 16.54 | 12 | 72.40 | 0.00 |
|
||||||
|
| August 2, 2023 | 27.63 | 15.18 | 5 | 72.03 | 0.00 |
|
||||||
|
| August 3, 2023 | 23.21 | 16.96 | 0 | 57.13 | 0.00 |
|
||||||
|
| August 4, 2023 | 19.69 | 15.16 | 3 | 77.11 | 0.00 |
|
||||||
|
| August 5, 2023 | 22.56 | 13.85 | 1 | 71.85 | 0.00 |
|
||||||
|
| August 6, 2023 | 17.40 | 13.63 | 6 | 76.00 | 0.00 |
|
||||||
|
| August 7, 2023 | 19.37 | 12.41 | 1 | 68.87 | 0.00 |
|
||||||
|
| August 8, 2023 | 22.69 | 9.08 | 0 | 68.04 | 0.00 |
|
||||||
|
| August 9, 2023 | 23.95 | 15.17 | 0 | 66.19 | 0.00 |
|
||||||
|
| August 10, 2023 | 28.43 | 13.53 | 0 | 65.08 | 0.00 |
|
||||||
|
| August 11, 2023 | 31.96 | 14.08 | 0 | 60.88 | 0.00 |
|
||||||
|
| August 12, 2023 | 28.96 | 18.78 | 3 | 71.81 | 0.00 |
|
||||||
|
| August 13, 2023 | 29.67 | 19.37 | 4 | 74.59 | 0.00 |
|
||||||
|
| August 14, 2023 | 31.20 | 19.62 | 0 | 69.00 | 0.00 |
|
||||||
|
| August 15, 2023 | 30.75 | 19.93 | 0 | 62.87 | 0.00 |
|
||||||
|
| August 16, 2023 | 32.45 | 17.45 | 1 | 65.34 | 0.00 |
|
||||||
|
| August 17, 2023 | 29.85 | 18.32 | 1 | 71.33 | 0.00 |
|
||||||
|
| August 18, 2023 | 34.44 | 17.57 | 0 | 56.25 | 0.00 |
|
||||||
|
| August 19, 2023 | 34.68 | 18.58 | 0 | 52.61 | 0.00 |
|
||||||
|
| August 20, 2023 | 34.66 | 19.31 | 0 | 64.34 | 0.00 |
|
||||||
|
| August 21, 2023 | 35.28 | 21.50 | 0 | 57.41 | 0.00 |
|
||||||
|
| August 22, 2023 | 35.19 | 20.84 | 0 | 58.28 | 0.00 |
|
||||||
|
| August 23, 2023 | 33.85 | 21.44 | 0 | 56.72 | 0.00 |
|
||||||
|
| August 24, 2023 | 35.90 | 19.54 | 2 | 61.52 | 0.00 |
|
||||||
|
| August 25, 2023 | 26.84 | 20.63 | 4 | 76.63 | 0.00 |
|
||||||
|
| August 26, 2023 | 20.79 | 17.18 | 10 | 84.57 | 0.00 |
|
||||||
|
| August 27, 2023 | 19.39 | 15.81 | 14 | 84.74 | 0.00 |
|
||||||
|
| August 28, 2023 | 16.00 | 13.23 | 8 | 92.20 | 0.00 |
|
||||||
|
| August 29, 2023 | 16.62 | 12.37 | 3 | 85.92 | 0.00 |
|
||||||
|
| August 30, 2023 | 20.79 | 11.85 | 0 | 77.28 | 0.00 |
|
||||||
|
| August 31, 2023 | 19.98 | 13.82 | 1 | 72.79 | 0.00 |
|
||||||
|
""";
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
spring.ai.azure.openai.temperature=0
|
||||||
|
spring.ai.azure.openai.model=gpt-35-turbo-16k
|
|
@ -0,0 +1,6 @@
|
||||||
|
Today is {today}.
|
||||||
|
You will act as a meteorological expert that helps analysis and forecast weather.
|
||||||
|
Given the following history weather of {city} of a whole year, please answer the questions and make predictions.
|
||||||
|
Don't use any external data.
|
||||||
|
|
||||||
|
{weatherHistory}
|
|
@ -0,0 +1,42 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>AI Weather Service</title>
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.6.4.min.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
AI Weather Service
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
<label>Question:</label>
|
||||||
|
<textarea id="question" cols="40" rows="5" title="question" style="display: block"></textarea>
|
||||||
|
<button type="button" >Ask AI</button>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Response:
|
||||||
|
</p>
|
||||||
|
<div id="response"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
$("button").click(function() {
|
||||||
|
var question = $("#question").val();
|
||||||
|
if (question) {
|
||||||
|
$("button").prop('disabled', true);
|
||||||
|
$.post("/weather/ask", { question: question }, function(result) {
|
||||||
|
$("#response").text(result[0].text);
|
||||||
|
}).always(function() {
|
||||||
|
$("button").prop('disabled', false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
Загрузка…
Ссылка в новой задаче