Add native hints for openai
This commit is contained in:
@@ -1,25 +1,54 @@
|
||||
package org.springframework.ai.autoconfigure;
|
||||
|
||||
import org.springframework.ai.openai.api.OpenAiApi;
|
||||
import org.springframework.aot.hint.MemberCategory;
|
||||
import org.springframework.aot.hint.RuntimeHints;
|
||||
import org.springframework.aot.hint.TypeReference;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.core.type.filter.AnnotationTypeFilter;
|
||||
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
||||
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
|
||||
public class NativeHints implements RuntimeHintsRegistrar {
|
||||
|
||||
@Override
|
||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||
new KnuddelsHints().registerHints(hints, classLoader);
|
||||
new PdfReaderHints().registerHints(hints, classLoader);
|
||||
new OpenAiHints().registerHints(hints, classLoader);
|
||||
hints.resources().registerResource(new ClassPathResource("embedding/embedding-model-dimensions.properties"));
|
||||
}
|
||||
|
||||
static class OpenAiHints implements RuntimeHintsRegistrar {
|
||||
|
||||
private static Set<TypeReference> findJsonAnnotatedClasses(Class<?> packageClass) {
|
||||
var packageName = packageClass.getPackageName();
|
||||
var classPathScanningCandidateComponentProvider = new ClassPathScanningCandidateComponentProvider(false);
|
||||
classPathScanningCandidateComponentProvider.addIncludeFilter(new AnnotationTypeFilter(JsonInclude.class));
|
||||
return classPathScanningCandidateComponentProvider.findCandidateComponents(packageName)
|
||||
.stream()
|
||||
.map(bd -> TypeReference.of(Objects.requireNonNull(bd.getBeanClassName())))
|
||||
.collect(Collectors.toUnmodifiableSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||
var mcs = MemberCategory.values();
|
||||
for (var tr : findJsonAnnotatedClasses(OpenAiApi.class))
|
||||
hints.reflection().registerType(tr, mcs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class KnuddelsHints implements RuntimeHintsRegistrar {
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user