From 8c61920a2c0a42abb0500559488682b4fab9f498 Mon Sep 17 00:00:00 2001 From: Daniel Gelvez Date: Tue, 11 Jul 2023 11:14:59 -0500 Subject: [PATCH] Examples simple --- .../xebia/functional/xef/java/auto/Book.java | 19 +++++ .../functional/xef/java/auto/ChessAI.java | 76 +++++++++++++++++++ .../functional/xef/java/auto/Colors.java | 17 +++++ .../functional/xef/java/auto/Employee.java | 42 ++++++++++ .../xebia/functional/xef/java/auto/Fact.java | 53 +++++++++++++ .../xebia/functional/xef/java/auto/Love.java | 15 ++++ .../xef/java/auto/MeaningOfLife.java | 17 +++++ 7 files changed, 239 insertions(+) create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/Book.java create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/ChessAI.java create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/Colors.java create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/Employee.java create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/Fact.java create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/Love.java create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/MeaningOfLife.java diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Book.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Book.java new file mode 100644 index 000000000..ff8e78365 --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Book.java @@ -0,0 +1,19 @@ +package com.xebia.functional.xef.java.auto; + +import java.util.concurrent.ExecutionException; + +public class Book { + + public String title; + public String author; + public String summary; + + public static void main(String[] args) throws ExecutionException, InterruptedException { + try (AIScope scope = new AIScope()) { + scope.prompt("To Kill a Mockingbird by Harper Lee summary.", Book.class) + .thenAccept(book -> System.out.println("To Kill a Mockingbird summary:\n" + book.summary)) + .get(); + } + } + +} diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/ChessAI.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/ChessAI.java new file mode 100644 index 000000000..4bcf02d50 --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/ChessAI.java @@ -0,0 +1,76 @@ +package com.xebia.functional.xef.java.auto; + +import java.util.ArrayList; +import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; + +public class ChessAI { + + private static class ChessMove { + public String player; + public String move; + + @Override + public String toString() { + return "ChessMove{" + + "player='" + player + '\'' + + ", move='" + move + '\'' + + '}'; + } + } + + private static class ChessBoard { + public String board; + } + + private static class GameState { + public Boolean ended; + public String winner; + } + + public static void main(String[] args) throws ExecutionException, InterruptedException { + try (AIScope scope = new AIScope()) { + var moves = new ArrayList(); + var gameEnded = false; + var winner = ""; + + while (!gameEnded) { + var currentPlayer = ((moves.size() % 2) == 0) ? "Player 1 (White)" : "Player 2 (Black)"; + + var prompt = String.format(""" + |%s, it's your turn. + |Previous moves: %s + |Make your next move:""", + currentPlayer, + moves.stream().map(ChessMove::toString).collect(Collectors.joining(", "))); + + ChessMove move = scope.prompt(prompt, ChessMove.class).get(); + moves.add(move); + + // Update boardState according to move.move + // ... + + var boardPrompt = String.format(""" + Given the following chess moves: %s, + generate a chess board on a table with appropriate emoji representations for each move and piece. + Add a brief description of the move and it's implications""", + moves.stream().map(it -> it.player + ":" + it.move).collect(Collectors.joining(", "))); + + ChessBoard chessBoard= scope.prompt(boardPrompt, ChessBoard.class).get(); + System.out.println("Current board:\n" + chessBoard.board); + + var gameStatePrompt = String.format(""" + Given the following chess moves: %s, + has the game ended (win, draw, or stalemate)?""", + moves.stream().map(ChessMove::toString).collect(Collectors.joining(", "))); + + GameState gameState = scope.prompt(gameStatePrompt, GameState.class).get(); + + gameEnded = gameState.ended; + winner = gameState.winner; + } + + System.out.println("Game over. Final move: " + moves.get(moves.size() - 1) + ", Winner: " + winner); + } + } +} diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Colors.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Colors.java new file mode 100644 index 000000000..8549013d3 --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Colors.java @@ -0,0 +1,17 @@ +package com.xebia.functional.xef.java.auto; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class Colors { + + public List colors; + + public static void main(String[] args) throws ExecutionException, InterruptedException { + try (AIScope scope = new AIScope()) { + scope.prompt("a selection of 10 beautiful colors that go well together", Colors.class) + .thenAccept(colors -> System.out.println("Colors:\n" + colors.colors)) + .get(); + } + } +} diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Employee.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Employee.java new file mode 100644 index 000000000..9fcdb210e --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Employee.java @@ -0,0 +1,42 @@ +package com.xebia.functional.xef.java.auto; + +import java.util.concurrent.ExecutionException; + +public class Employee { + + public String firstName; + public String lastName; + public Integer age; + public String position; + public Company company; + + private static class Address { + public String street; + public String city; + public String country; + } + + private static class Company { + public String name; + public Address address; + } + + public static String complexPrompt = + "Provide made up information for an Employee that includes their first name, last name, age, position, and their company's name and address (street, city, and country).\n" + + "Use the information provided."; + + public static void main(String[] args) throws ExecutionException, InterruptedException { + try (AIScope scope = new AIScope()) { + scope.prompt(complexPrompt, Employee.class) + .thenAccept(employeeData -> System.out.println( + "Employee Information:\n\n" + + "Name: " + employeeData.firstName + " " + employeeData.lastName + "\n" + + "Age: " + employeeData.age + "\n" + + "Position: " + employeeData.position + "\n" + + "Company: " + employeeData.company.name + "\n" + + "Address: " + employeeData.company.address.street + ", " + employeeData.company.address.city + ", " + employeeData.company.address.country + "." + )) + .get(); + } + } +} diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Fact.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Fact.java new file mode 100644 index 000000000..eb6e8bed7 --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Fact.java @@ -0,0 +1,53 @@ +package com.xebia.functional.xef.java.auto; + +import java.util.concurrent.ExecutionException; + +public class Fact { + + private static class FactClass { + public String topic; + public String content; + + @Override + public String toString() { + return "FactClass{" + + "topic='" + topic + '\'' + + ", content='" + content + '\'' + + '}'; + } + } + + private static class Riddle { + public FactClass fact1; + public FactClass fact2; + public String riddle; + + @Override + public String toString() { + return "Riddle{" + + "fact1=" + fact1 + + ", fact2=" + fact2 + + ", riddle='" + riddle + '\'' + + '}'; + } + } + + + + public static void main(String[] args) throws ExecutionException, InterruptedException { + try (AIScope scope = new AIScope()) { + var fact1 = scope.prompt("A fascinating fact about you", FactClass.class).get(); + var fact2 = scope.prompt("An interesting fact about me", FactClass.class).get(); + + String riddlePrompt = ""+ + "Create a riddle that combines the following facts:\n\n" + + + "Fact 1: " + fact1.content + "\n" + + "Fact 2: " + fact2.content; + + scope.prompt(riddlePrompt, Riddle.class) + .thenAccept(riddle -> System.out.println("Riddle:\n\n" + riddle)).get(); + } + } + +} diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Love.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Love.java new file mode 100644 index 000000000..ad6648f3d --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/Love.java @@ -0,0 +1,15 @@ +package com.xebia.functional.xef.java.auto; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class Love { + public List loveList; + public static void main(String[] args) throws ExecutionException, InterruptedException { + try (AIScope scope = new AIScope()) { + scope.prompt("tell me you like me with just emojis", Love.class) + .thenAccept(love -> System.out.println(love.loveList)) + .get(); + } + } +} diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/MeaningOfLife.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/MeaningOfLife.java new file mode 100644 index 000000000..19287f1b8 --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/MeaningOfLife.java @@ -0,0 +1,17 @@ +package com.xebia.functional.xef.java.auto; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class MeaningOfLife { + public List mainTheories; + + public static void main(String[] args) throws ExecutionException, InterruptedException { + try (AIScope scope = new AIScope()) { + scope.prompt("What are the main theories about the meaning of life", MeaningOfLife.class) + .thenAccept(meaningOfLife -> + System.out.println("There are several theories about the meaning of life:\n" + meaningOfLife.mainTheories)) + .get(); + } + } +}