001package org.nasdanika.ai;
002
003import java.util.Arrays;
004import java.util.List;
005
006public interface Chat extends Model {
007        
008        interface Message {
009                
010                String getRole();
011                
012                String getContent();
013                
014                static Message create(String role, String content) {
015                        return new Message() {
016                                
017                                @Override
018                                public String getRole() {
019                                        return role;
020                                }
021                                
022                                @Override
023                                public String getContent() {
024                                        return content;
025                                }
026                                
027                        };
028                        
029                }
030                
031        }
032        
033        interface ResponseMessage extends Message {
034                
035                String getRefusal();
036                
037                String getFinishReason();
038                
039        }
040                
041        enum Role {
042                
043                system,
044                assistant,
045                user,
046                function,
047                tool,
048                developer;              
049                
050                public Message createMessage(String content) {
051                        return Message.create(name(), content);
052                }
053                
054        }
055        
056        List<ResponseMessage> chat(List<Message> messages);
057                
058        default List<ResponseMessage> chat(Message... messages) {
059                return chat(Arrays.asList(messages));
060        }       
061        
062        int getMaxOutputTokens();
063
064}