001/* 002 * SPDX-License-Identifier: Apache-2.0 003 * 004 * Copyright 2025-2026 The Enola <https://enola.dev> Authors 005 * 006 * Licensed under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * https://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package dev.enola.ai.adk.test; 019 020import com.google.adk.models.LlmRequest; 021import com.google.adk.models.LlmResponse; 022import com.google.genai.types.Content; 023 024import io.reactivex.rxjava3.core.Flowable; 025 026public class EchoModel extends TestLlm { 027 028 public EchoModel() { 029 // TODO Fix this ugly temporary hack... 030 super(() -> null); 031 this.responsesSupplier = () -> Flowable.just(echo(getLastRequest())); 032 } 033 034 private LlmResponse echo(LlmRequest llmRequest) { 035 var builder = LlmResponse.builder(); 036 llmRequest.contents().stream() 037 .map( 038 content -> { 039 var copy = Content.builder().role("model"); 040 content.parts().ifPresent(copy::parts); 041 return copy.build(); 042 }) 043 .forEach(builder::content); 044 return builder.build(); 045 } 046}