Spaces:
Sleeping
Sleeping
public class TinyLlama extends OllamaContainer { | |
private final String imageName; | |
public TinyLlama(String imageName) { | |
super(DockerImageName.parse(imageName) | |
.asCompatibleSubstituteFor("ollama/ollama:0.1.44")); | |
this.imageName = imageName; | |
} | |
public void createImage(String imageName) { | |
var ollama = new OllamaContainer("ollama/ollama:0.1.44"); | |
ollama.start(); | |
try { | |
ollama.execInContainer("apt-get", "update"); | |
ollama.execInContainer("apt-get", "upgrade", "-y"); | |
ollama.execInContainer("apt-get", "install", "-y", "python3-pip"); | |
ollama.execInContainer("pip", "install", "huggingface-hub"); | |
ollama.execInContainer( | |
"huggingface-cli", | |
"download", | |
"DavidAU/DistiLabelOrca-TinyLLama-1.1B-Q8_0-GGUF", | |
"distilabelorca-tinyllama-1.1b.Q8_0.gguf", | |
"--local-dir", | |
"." | |
); | |
ollama.execInContainer( | |
"sh", | |
"-c", | |
String.format("echo '%s' > Modelfile", "FROM distilabelorca-tinyllama-1.1b.Q8_0.gguf") | |
); | |
ollama.execInContainer("ollama", "create", "distilabelorca-tinyllama-1.1b.Q8_0.gguf", "-f", "Modelfile"); | |
ollama.execInContainer("rm", "distilabelorca-tinyllama-1.1b.Q8_0.gguf"); | |
ollama.commitToImage(imageName); | |
} catch (IOException | InterruptedException e) { | |
throw new ContainerFetchException(e.getMessage()); | |
} | |
} | |
public String getModelName() { | |
return "distilabelorca-tinyllama-1.1b.Q8_0.gguf"; | |
} | |
public void start() { | |
try { | |
super.start(); | |
} catch (ContainerFetchException ex) { | |
// If image doesn't exist, create it. Subsequent runs will reuse the image. | |
createImage(imageName); | |
super.start(); | |
} | |
} | |
} | |
var tinyLlama = new TinyLlama("faq-ai"); | |
tinyLlama.start(); | |
String response = given() | |
.baseUri(tinyLlama.getEndpoint()) | |
.header(new Header("Content-Type", "application/json")) | |
.body(new CompletionRequest(tinyLlama.getModelName() + ":latest", List.of(new Message("user", "What is the capital of France?")), false)) | |
.post("/api/chat") | |
.getBody().as(ChatResponse.class).message.content; | |
System.out.println("Response from LLM " + response); |