Skip to content

Commit

Permalink
Support GenAI on Tanzu Platform as a built-in CfEnvProcessor (#270)
Browse files Browse the repository at this point in the history
Co-authored-by: Stuart Charlton <[email protected]>
  • Loading branch information
svrc and Stuart Charlton authored Aug 7, 2024
1 parent f30690c commit f85c603
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright 2024 the original author or authors.
*
* Licensed 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
*
* https://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.
*/
package io.pivotal.cfenv.spring.boot;

import java.util.Map;

import io.pivotal.cfenv.core.CfCredentials;
import io.pivotal.cfenv.core.CfService;

/**
* Retrieve GenAI on Tanzu Platform properties from {@link CfCredentials} and
* set {@literal spring.ai}
* Boot properties.
*
* @author Stuart Charlton
**/
public class GenAICfEnvProcessor implements CfEnvProcessor {

@Override
public boolean accept(CfService service) {
return service.existsByTagIgnoreCase("genai") ||
service.existsByLabelStartsWith("genai");
}

@Override
public void process(CfCredentials cfCredentials, Map<String, Object> properties) {
properties.put("spring.ai.openai.base-url", cfCredentials.getString("api_base"));
properties.put("spring.ai.openai.api-key", cfCredentials.getString("api_key"));
}

@Override
public CfEnvProcessorProperties getProperties() {
return CfEnvProcessorProperties.builder()
.propertyPrefixes("spring.ai.openai")
.serviceName("GenAI on Tanzu Platform")
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ io.pivotal.cfenv.spring.boot.CfEnvProcessor=\
io.pivotal.cfenv.spring.boot.AmqpCfEnvProcessor,\
io.pivotal.cfenv.spring.boot.CredHubCfEnvProcessor,\
io.pivotal.cfenv.spring.boot.CassandraCfEnvProcessor,\
io.pivotal.cfenv.spring.boot.GenAICfEnvProcessor,\
io.pivotal.cfenv.spring.boot.VaultCfEnvProcessor


Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright 2024 the original author or authors.
*
* Licensed 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
*
* https://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.
*/
package io.pivotal.cfenv.spring.boot;

import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;

import io.pivotal.cfenv.test.AbstractCfEnvTests;

import static org.assertj.core.api.Assertions.assertThat;

/**
* @author Stuart Charlton
*/
public class GenAICfEnvProcessorTests extends AbstractCfEnvTests {

private static final String EXPECTED_TOKEN_FROM_JSON_FILE = "sk-KW5kiNOKDd_1dFxsAjpVa";
private static final String EXPECTED_URI_FROM_JSON_FILE = "https://genai-proxy.tpcf.io";
private static final String TEST_GENAI_INFO_JSON = "test-genai-info.json";

@Test
public void genaiServiceCreation() {
mockConnectorLibrary(false);
mockVcapServices(getServicesPayload(readTestDataFile(TEST_GENAI_INFO_JSON)));
assertThat(getEnvironment().getProperty("spring.ai.openai.base-url")).isEqualTo(EXPECTED_URI_FROM_JSON_FILE);
assertThat(getEnvironment().getProperty("spring.ai.openai.api-key")).isEqualTo(EXPECTED_TOKEN_FROM_JSON_FILE);
}

private MockUp<?> mockConnectorLibrary(boolean isUsingConnectorLibrary) {
return new MockUp<ConnectorLibraryDetector>() {
@Mock
public boolean isUsingConnectorLibrary() {
return isUsingConnectorLibrary;
}
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"credentials": {
"api_base": "https://genai-proxy.tpcf.io",
"api_key": "sk-KW5kiNOKDd_1dFxsAjpVa"
},
"instance_name": "genai",
"label": "genai",
"name": "genai",
"plan": "shared",
"provider": null,
"syslog_drain_url": null,
"tags": [
"genai",
"llm"
],
"volume_mounts": []
}

0 comments on commit f85c603

Please sign in to comment.