make it work

This commit is contained in:
Minecon724 2024-08-28 15:09:38 +02:00
parent 40cb1a012c
commit ed10ade455
Signed by: Minecon724
GPG key ID: 3CCC4D267742C8E8
9 changed files with 115 additions and 10 deletions

View file

@ -20,6 +20,11 @@
<artifactId>groovy</artifactId>
<version>4.0.22</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
</project>

View file

@ -1,12 +1,22 @@
package eu.m724;
import eu.m724.chat.Chat;
import eu.m724.chat.ChatMessage;
import eu.m724.example.ExampleSource;
import eu.m724.responsesource.ChatResponse;
import eu.m724.responsesource.ChatResponseSource;
import groovy.lang.GroovyShell;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
GroovyShell shell = new GroovyShell();
Object result = shell.evaluate("2 + 2");
System.out.println(result);
ChatResponseSource source = new ExampleSource();
Chat chat = new Chat();
chat.messages.add(new ChatMessage(false, "hello"));
ChatResponse chatResponse = source.ask(chat);
System.out.println(chatResponse.text().join());
System.out.println(chatResponse.message().text);
}
}

View file

@ -1,5 +1,15 @@
package eu.m724.chat;
public class Chat {
import java.util.ArrayList;
import java.util.List;
public class Chat {
public String systemPrompt = null; // TODO move that away?
public List<ChatMessage> messages = new ArrayList<>();
public Chat(String systemPrompt) {
this.systemPrompt = systemPrompt;
}
public Chat() {}
}

View file

@ -1,8 +1,14 @@
package eu.m724.chat;
public interface ChatMessage {
boolean isStreaming();
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Flow;
String getContent();
public class ChatMessage {
public boolean assistant;
public String text; // TODO make it private and modifiable other way
public ChatMessage(boolean assistant, String text) {
this.assistant = assistant;
this.text = text;
}
}

View file

@ -0,0 +1,46 @@
package eu.m724.example
import eu.m724.chat.Chat
import eu.m724.chat.ChatMessage
import eu.m724.responsesource.ChatResponse
import eu.m724.responsesource.ChatResponseSource
import eu.m724.responsesource.ChatResponseSourceInfo
import java.util.concurrent.CompletableFuture
/**
* an example chatresponsesource chatresponsesource ChatResponseSource CHATRESPONSESOURCE CAHTSERREPOSNECSOURCE
* note to self: rename that already...
*/
class ExampleSource implements ChatResponseSource {
private ChatResponseSourceInfo info =
new ChatResponseSourceInfo("yo", "ye", "1.0", 1)
@Override
ChatResponseSourceInfo info() {
return info
}
@Override
ChatResponse ask(Chat chat) {
return new ChatResponse() {
String[] parts
CompletableFuture<String> completableFuture = new CompletableFuture<>();
@Override
boolean isStreaming() {
return false
}
@Override
CompletableFuture<String> text() {
return CompletableFuture.completedFuture("hello how can i assist you today")
}
@Override
ChatMessage message() {
return new ChatMessage(true, "i assisted you already bye")
}
}
}
}

View file

@ -1,6 +1,27 @@
package eu.m724.responsesource;
import eu.m724.chat.ChatMessage;
import java.util.concurrent.CompletableFuture;
public interface ChatResponse {
/**
* is this response streaming
* @return is this response streaming
*/
boolean isStreaming();
// TODO
/**
* if streamed, text token by token as it goes (or other splitting depending on the source)
* if not, the {@link CompletableFuture} returns just the whole response after it's ready
* @return yeah
*/
CompletableFuture<String> text(); // TODO completablefuture is not correct here also fix the doc
/**
* gets the resulting {@link ChatMessage}
* TODO I think it should be available after streaming is done so maybe wrap this in {@link CompletableFuture}
* @return the resulting {@link ChatMessage}
*/
ChatMessage message();
}

View file

@ -1,7 +1,9 @@
package eu.m724.responsesource;
import eu.m724.chat.Chat;
public interface ChatResponseSource {
ChatResponseSourceInfo info();
ChatResponse
ChatResponse ask(Chat chat);
}

View file

@ -0,0 +1,4 @@
package eu.m724.responsesource.net;
public interface Requester {
}

View file

@ -52,6 +52,7 @@ here's what claude recommended to consider: (I only edited the headers)
| Piet | No | Very limited | Requires interpreter | Minimal | N/A | For when your code should literally be a work of art |
| C# | No | Limited | Often required | Very active | Yes | Java's arch-nemesis with a Microsoft accent |
I think the name "source" is fine, but I don't think that's how the class should be named because it may be confused with java stuff
similar thing probably exists... I'm sure it does, but I do it as I'd like, maybe it will end up being better
sorry for such mess, I'm typing fast so I don't forget, and I'm out of water as for now, and distracting music