Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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: 2 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ extend-ignore = E203,E501,E701, B017
exclude =
.venv,
venv,
prod_venv,
python/type=local/*,
python/kserve/kserve/exceptions.py,
python/kserve/kserve/configuration.py,
python/kserve/kserve/rest.py,
Expand Down
3 changes: 1 addition & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Build the manager binary
# Upstream already is on go 1.24, however there is no gotoolset for 1.24 yet.
# TODO move to ubi9/go-toolset:1.24 when available
FROM registry.access.redhat.com/ubi9/go-toolset:1.23 as builder
FROM registry.access.redhat.com/ubi9/go-toolset:1.24 as builder

# Copy in the go src
WORKDIR /go/src/github.com/kserve/kserve
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ poetry-lock: $(POETRY)
# Update the kserve package first as other packages depends on it.
cd ./python && \
cd kserve && $(POETRY) lock --no-update && cd .. && \
for file in $$(find . -type f -name "pyproject.toml" -not -path "./pyproject.toml" -not -path "*.venv/*"); do \
for file in $$(find . -type f -name "pyproject.toml" -not -path "./pyproject.toml" -not -path "*.venv/*" -not -path "*/prod_venv/*" -not -path "*/site-packages/*"); do \
folder=$$(dirname "$$file"); \
echo "moving into folder $$folder"; \
case "$$folder" in \
Expand Down
2 changes: 1 addition & 1 deletion agent.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Build the inference-agent binary
# Upstream already is on go 1.24, however there is no gotoolset for 1.24 yet.
# TODO move to ubi9/go-toolset:1.24 when available
FROM registry.access.redhat.com/ubi9/go-toolset:1.23 AS builder
FROM registry.access.redhat.com/ubi9/go-toolset:1.24 AS builder

# Copy in the go src
WORKDIR /go/src/github.com/kserve/kserve
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.2
name: llminferenceserviceconfigs.serving.kserve.io
spec:
group: serving.kserve.io
names:
kind: LLMInferenceServiceConfig
listKind: LLMInferenceServiceConfigList
plural: llminferenceserviceconfigs
singular: llminferenceserviceconfig
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
properties:
apiVersion:
type: string
kind:
type: string
metadata:
type: object
spec:
type: object
x-kubernetes-map-type: atomic
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.2
name: llminferenceservices.serving.kserve.io
spec:
group: serving.kserve.io
names:
kind: LLMInferenceService
listKind: LLMInferenceServiceList
plural: llminferenceservices
shortNames:
- llmisvc
singular: llminferenceservice
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .status.url
name: URL
type: string
- jsonPath: .status.conditions[?(@.type=='Ready')].status
name: Ready
type: string
- jsonPath: .status.conditions[?(@.type=='Ready')].reason
name: Reason
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
- jsonPath: .status.addresses[*].url
name: URLs
priority: 1
type: string
name: v1alpha1
schema:
openAPIV3Schema:
properties:
apiVersion:
type: string
kind:
type: string
metadata:
type: object
spec:
type: object
x-kubernetes-map-type: atomic
x-kubernetes-preserve-unknown-fields: true
status:
type: object
x-kubernetes-map-type: atomic
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
subresources:
status: {}
32 changes: 23 additions & 9 deletions cmd/agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ var (
workers = flag.Int("workers", 5, "Number of workers")
sourceUri = flag.String("source-uri", "", "The source URI to use when publishing cloudevents")
logMode = flag.String("log-mode", string(v1beta1.LogAll), "Whether to log 'request', 'response' or 'all'")
logStorePath = flag.String("log-store-path", "", "The path to the log output")
logStoreFormat = flag.String("log-store-format", "json", "Format for log output, 'json' or 'yaml'")
inferenceService = flag.String("inference-service", "", "The InferenceService name to add as header to log events")
namespace = flag.String("namespace", "", "The namespace to add as header to log events")
endpoint = flag.String("endpoint", "", "The endpoint name to add as header to log events")
Expand Down Expand Up @@ -153,7 +155,7 @@ func main() {
var loggerArgs *loggerArgs
if *logUrl != "" {
logger.Info("Starting logger")
loggerArgs = startLogger(*workers, logger)
loggerArgs = startLogger(*workers, logStorePath, logStoreFormat, logger)
}

var batcherArgs *batcherArgs
Expand Down Expand Up @@ -264,18 +266,18 @@ func startBatcher(logger *zap.SugaredLogger) *batcherArgs {
}
}

func startLogger(workers int, logger *zap.SugaredLogger) *loggerArgs {
func startLogger(workers int, logStorePath *string, logStoreFormat *string, log *zap.SugaredLogger) *loggerArgs {
loggingMode := v1beta1.LoggerType(*logMode)
switch loggingMode {
case v1beta1.LogAll, v1beta1.LogRequest, v1beta1.LogResponse:
default:
logger.Errorf("Malformed log-mode %s", *logMode)
log.Errorf("Malformed log-mode %s", *logMode)
os.Exit(-1)
}

logUrlParsed, err := url.Parse(*logUrl)
if err != nil {
logger.Errorf("Malformed log-url %s", *logUrl)
log.Errorf("Malformed log-url %s", *logUrl)
os.Exit(-1)
}

Expand All @@ -285,23 +287,35 @@ func startLogger(workers int, logger *zap.SugaredLogger) *loggerArgs {

sourceUriParsed, err := url.Parse(*sourceUri)
if err != nil {
logger.Errorf("Malformed source_uri %s", *sourceUri)
log.Errorf("Malformed source_uri %s", *sourceUri)
os.Exit(-1)
}

var annotationKVPair map[string]string = map[string]string{}
annotationKVPair := map[string]string{}
for _, annotations := range *metadataAnnotations {
k, v, found := strings.Cut(annotations, "=")
if found {
annotationKVPair[k] = v
} else {
logger.Errorf("annotation does not adhere to desired format got key: %s value: %s", k, v)
log.Errorf("annotation does not adhere to desired format got key: %s value: %s", k, v)
os.Exit(-1)
}
}

logger.Info("Starting the log dispatcher")
kfslogger.StartDispatcher(workers, logger)
var store kfslogger.Store
if kfslogger.GetStorageStrategy(*logUrl) != kfslogger.HttpStorage {
if logStoreFormat != nil && *logStoreFormat != "" && logStorePath != nil && *logStorePath != "" {
log.Infow("Logger storage is enabled", "path", logStorePath, "logStoreFormat", logStoreFormat)
store, err = kfslogger.NewStoreForScheme(logUrlParsed.Scheme, *logStorePath, *logStoreFormat, log)
if err != nil {
log.Errorw("Error creating logger store", zap.Error(err))
os.Exit(-1)
}
}
}

log.Info("Starting the log dispatcher")
kfslogger.StartDispatcher(workers, store, log)
return &loggerArgs{
loggerType: loggingMode,
logUrl: logUrlParsed,
Expand Down
4 changes: 4 additions & 0 deletions config/crd/full/serving.kserve.io_clusterservingruntimes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,8 @@ spec:
- port
type: object
type: object
stopSignal:
type: string
type: object
livenessProbe:
properties:
Expand Down Expand Up @@ -2772,6 +2774,8 @@ spec:
- port
type: object
type: object
stopSignal:
type: string
type: object
livenessProbe:
properties:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,8 @@ spec:
- port
type: object
type: object
stopSignal:
type: string
type: object
livenessProbe:
properties:
Expand Down
Loading
Loading