Skip to content

Commit dee758c

Browse files
committed
examples
1 parent 24fedc3 commit dee758c

7 files changed

Lines changed: 64 additions & 65 deletions

File tree

examples/src/main/java/io/orkes/conductor/sdk/examples/agentic/AgenticExamplesRunner.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525
import java.util.Scanner;
2626
import java.util.concurrent.TimeUnit;
2727

28+
import org.conductoross.conductor.sdk.ai.LlmChatComplete;
29+
import org.conductoross.conductor.sdk.ai.LlmGenerateEmbeddings;
30+
import org.conductoross.conductor.sdk.ai.LlmIndexText;
31+
import org.conductoross.conductor.sdk.ai.LlmSearchIndex;
32+
import org.conductoross.conductor.sdk.ai.LlmTextComplete;
33+
2834
import com.netflix.conductor.client.automator.TaskRunnerConfigurer;
2935
import com.netflix.conductor.client.http.ConductorClient;
3036
import com.netflix.conductor.client.http.MetadataClient;
@@ -40,11 +46,6 @@
4046
import com.netflix.conductor.sdk.workflow.def.tasks.DoWhile;
4147
import com.netflix.conductor.sdk.workflow.def.tasks.ForkJoin;
4248
import com.netflix.conductor.sdk.workflow.def.tasks.Http;
43-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmChatComplete;
44-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmGenerateEmbeddings;
45-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmIndexDocument;
46-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmSearchIndex;
47-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmTextComplete;
4849
import com.netflix.conductor.sdk.workflow.def.tasks.SetVariable;
4950
import com.netflix.conductor.sdk.workflow.def.tasks.SimpleTask;
5051
import com.netflix.conductor.sdk.workflow.def.tasks.Switch;
@@ -384,35 +385,35 @@ private void testLlmTaskClasses() {
384385
// LlmTextComplete
385386
LlmTextComplete textTask = new LlmTextComplete("test_text", "text_ref")
386387
.llmProvider("openai")
387-
.model("gpt-4")
388+
.model("gpt-4o-mini")
388389
.promptName("test-prompt")
389390
.temperature(0.7);
390391
pass("LlmTextComplete instantiated");
391392

392393
// LlmChatComplete
393394
LlmChatComplete chatTask = new LlmChatComplete("test_chat", "chat_ref")
394395
.llmProvider("openai")
395-
.model("gpt-4")
396+
.model("gpt-4o-mini")
396397
.messages(List.of(Map.of("role", "user", "content", "test")))
397398
.temperature(0.7);
398399
pass("LlmChatComplete instantiated");
399400

400-
// LlmIndexDocument
401-
LlmIndexDocument indexTask = new LlmIndexDocument("test_index", "index_ref")
401+
// LlmIndexText
402+
LlmIndexText indexTask = new LlmIndexText("test_index", "index_ref")
402403
.vectorDb("pinecone")
403404
.namespace("test")
404405
.index("test-index")
405406
.embeddingModel("text-embedding-ada-002")
406407
.text("test document");
407-
pass("LlmIndexDocument instantiated");
408+
pass("LlmIndexText instantiated");
408409

409410
// LlmSearchIndex
410411
LlmSearchIndex searchTask = new LlmSearchIndex("test_search", "search_ref")
411412
.vectorDb("pinecone")
412413
.namespace("test")
413414
.index("test-index")
414415
.query("test query")
415-
.topK(5);
416+
.maxResults(5);
416417
pass("LlmSearchIndex instantiated");
417418

418419
// LlmGenerateEmbeddings

examples/src/main/java/io/orkes/conductor/sdk/examples/agentic/FunctionCallingExample.java

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
import java.util.Map;
1919
import java.util.concurrent.TimeUnit;
2020

21+
import org.conductoross.conductor.sdk.ai.LlmChatComplete;
22+
import org.conductoross.conductor.sdk.ai.ToolSpec;
23+
2124
import com.netflix.conductor.client.http.ConductorClient;
2225
import com.netflix.conductor.common.run.Workflow;
2326
import com.netflix.conductor.sdk.workflow.def.ConductorWorkflow;
24-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmChatComplete;
2527
import com.netflix.conductor.sdk.workflow.def.tasks.SimpleTask;
2628
import com.netflix.conductor.sdk.workflow.def.tasks.Switch;
2729
import com.netflix.conductor.sdk.workflow.executor.WorkflowExecutor;
@@ -58,7 +60,7 @@ public class FunctionCallingExample {
5860

5961
private static final String WORKFLOW_NAME = "llm_function_calling";
6062
private static final String LLM_PROVIDER = "openai";
61-
private static final String MODEL = "gpt-4";
63+
private static final String MODEL = "gpt-4o-mini";
6264

6365
public static void main(String[] args) {
6466
String query = args.length > 0 ? String.join(" ", args) : "What's the weather like in San Francisco?";
@@ -112,29 +114,35 @@ private static ConductorWorkflow<Map<String, Object>> createFunctionCallingWorkf
112114
workflow.setOwnerEmail("examples@conductor-oss.org");
113115
workflow.setDescription("LLM function calling with dynamic tool selection");
114116

115-
// Define available tools/functions
116-
List<Object> tools = new ArrayList<>();
117-
tools.add(createToolDefinition("get_weather",
118-
"Get the current weather for a location",
119-
Map.of(
117+
// Define available tools/functions using ToolSpec
118+
List<ToolSpec> tools = new ArrayList<>();
119+
tools.add(new ToolSpec()
120+
.name("get_weather")
121+
.type("SIMPLE")
122+
.description("Get the current weather for a location")
123+
.inputSchema(Map.of(
120124
"type", "object",
121125
"properties", Map.of(
122126
"location", Map.of("type", "string", "description", "City and state/country")
123127
),
124128
"required", List.of("location")
125129
)));
126-
tools.add(createToolDefinition("search_web",
127-
"Search the web for information",
128-
Map.of(
130+
tools.add(new ToolSpec()
131+
.name("search_web")
132+
.type("SIMPLE")
133+
.description("Search the web for information")
134+
.inputSchema(Map.of(
129135
"type", "object",
130136
"properties", Map.of(
131137
"query", Map.of("type", "string", "description", "Search query")
132138
),
133139
"required", List.of("query")
134140
)));
135-
tools.add(createToolDefinition("calculate",
136-
"Perform mathematical calculations",
137-
Map.of(
141+
tools.add(new ToolSpec()
142+
.name("calculate")
143+
.type("SIMPLE")
144+
.description("Perform mathematical calculations")
145+
.inputSchema(Map.of(
138146
"type", "object",
139147
"properties", Map.of(
140148
"expression", Map.of("type", "string", "description", "Math expression to evaluate")
@@ -153,7 +161,6 @@ private static ConductorWorkflow<Map<String, Object>> createFunctionCallingWorkf
153161
Map.of("role", "user", "content", "${workflow.input.query}")
154162
))
155163
.tools(tools)
156-
.toolChoice("auto")
157164
.temperature(0.0);
158165

159166
workflow.add(functionSelector);
@@ -211,18 +218,4 @@ private static ConductorWorkflow<Map<String, Object>> createFunctionCallingWorkf
211218
return workflow;
212219
}
213220

214-
/**
215-
* Creates a tool definition in OpenAI function calling format.
216-
*/
217-
private static Map<String, Object> createToolDefinition(String name, String description,
218-
Map<String, Object> parameters) {
219-
return Map.of(
220-
"type", "function",
221-
"function", Map.of(
222-
"name", name,
223-
"description", description,
224-
"parameters", parameters
225-
)
226-
);
227-
}
228221
}

examples/src/main/java/io/orkes/conductor/sdk/examples/agentic/HumanInLoopChatExample.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@
1818
import java.util.Map;
1919
import java.util.Scanner;
2020

21+
import org.conductoross.conductor.sdk.ai.LlmChatComplete;
22+
2123
import com.netflix.conductor.client.http.ConductorClient;
2224
import com.netflix.conductor.client.http.TaskClient;
2325
import com.netflix.conductor.client.http.WorkflowClient;
2426
import com.netflix.conductor.common.metadata.tasks.TaskResult;
2527
import com.netflix.conductor.common.run.Workflow;
2628
import com.netflix.conductor.sdk.workflow.def.ConductorWorkflow;
2729
import com.netflix.conductor.sdk.workflow.def.tasks.DoWhile;
28-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmChatComplete;
2930
import com.netflix.conductor.sdk.workflow.def.tasks.SetVariable;
3031
import com.netflix.conductor.sdk.workflow.def.tasks.Wait;
3132
import com.netflix.conductor.sdk.workflow.executor.WorkflowExecutor;
@@ -61,7 +62,7 @@ public class HumanInLoopChatExample {
6162

6263
private static final String WORKFLOW_NAME = "human_in_loop_chat";
6364
private static final String LLM_PROVIDER = "openai";
64-
private static final String MODEL = "gpt-4";
65+
private static final String MODEL = "gpt-4o-mini";
6566
private static final int MAX_TURNS = 10;
6667

6768
public static void main(String[] args) {

examples/src/main/java/io/orkes/conductor/sdk/examples/agentic/LlmChatExample.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@
1818
import java.util.Map;
1919
import java.util.concurrent.TimeUnit;
2020

21+
import org.conductoross.conductor.sdk.ai.LlmChatComplete;
22+
2123
import com.netflix.conductor.client.http.ConductorClient;
2224
import com.netflix.conductor.common.run.Workflow;
2325
import com.netflix.conductor.sdk.workflow.def.ConductorWorkflow;
2426
import com.netflix.conductor.sdk.workflow.def.tasks.DoWhile;
25-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmChatComplete;
2627
import com.netflix.conductor.sdk.workflow.def.tasks.SetVariable;
2728
import com.netflix.conductor.sdk.workflow.executor.WorkflowExecutor;
2829

@@ -66,7 +67,7 @@ public class LlmChatExample {
6667

6768
private static final String WORKFLOW_NAME = "llm_multi_turn_chat";
6869
private static final String LLM_PROVIDER = "openai";
69-
private static final String MODEL = "gpt-4";
70+
private static final String MODEL = "gpt-4o-mini";
7071
private static final int MAX_TURNS = 3;
7172

7273
public static void main(String[] args) {
@@ -151,7 +152,7 @@ private static ConductorWorkflow<Map<String, Object>> createChatWorkflow(Workflo
151152
LlmChatComplete askerTask = new LlmChatComplete("asker_llm", "asker_ref")
152153
.llmProvider("${workflow.input.llmProvider}")
153154
.model("${workflow.input.model}")
154-
.promptName("asker-prompt")
155+
.instructions("asker-prompt")
155156
.promptVariables(Map.of(
156157
"topic", "${workflow.variables.topic}",
157158
"conversationHistory", "${workflow.variables.conversationHistory}"
@@ -167,7 +168,7 @@ private static ConductorWorkflow<Map<String, Object>> createChatWorkflow(Workflo
167168
LlmChatComplete answererTask = new LlmChatComplete("answerer_llm", "answerer_ref")
168169
.llmProvider("${workflow.input.llmProvider}")
169170
.model("${workflow.input.model}")
170-
.promptName("answerer-prompt")
171+
.instructions("answerer-prompt")
171172
.promptVariables(Map.of(
172173
"question", "${workflow.variables.lastQuestion}",
173174
"conversationHistory", "${workflow.variables.conversationHistory}"

examples/src/main/java/io/orkes/conductor/sdk/examples/agentic/RagWorkflowExample.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717
import java.util.Map;
1818
import java.util.concurrent.TimeUnit;
1919

20+
import org.conductoross.conductor.sdk.ai.LlmChatComplete;
21+
import org.conductoross.conductor.sdk.ai.LlmIndexText;
22+
import org.conductoross.conductor.sdk.ai.LlmSearchIndex;
23+
2024
import com.netflix.conductor.client.http.ConductorClient;
2125
import com.netflix.conductor.common.run.Workflow;
2226
import com.netflix.conductor.sdk.workflow.def.ConductorWorkflow;
23-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmChatComplete;
24-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmIndexDocument;
25-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmSearchIndex;
2627
import com.netflix.conductor.sdk.workflow.executor.WorkflowExecutor;
2728

2829
import io.orkes.conductor.client.http.OrkesPromptClient;
@@ -59,7 +60,7 @@ public class RagWorkflowExample {
5960
private static final String QUERY_WORKFLOW = "rag_query";
6061
private static final String LLM_PROVIDER = "openai";
6162
private static final String EMBEDDING_MODEL = "text-embedding-ada-002";
62-
private static final String CHAT_MODEL = "gpt-4";
63+
private static final String CHAT_MODEL = "gpt-4o-mini";
6364
private static final String VECTOR_DB = "pinecone";
6465
private static final String INDEX_NAME = "knowledge-base";
6566
private static final String NAMESPACE = "rag-demo";
@@ -142,7 +143,7 @@ private static ConductorWorkflow<Map<String, Object>> createIndexingWorkflow(Wor
142143
workflow.setDescription("Index documents into vector database for RAG");
143144

144145
// Index document task
145-
LlmIndexDocument indexTask = new LlmIndexDocument("index_document", "index_ref")
146+
LlmIndexText indexTask = new LlmIndexText("index_document", "index_ref")
146147
.vectorDb("${workflow.input.vectorDb}")
147148
.namespace("${workflow.input.namespace}")
148149
.index("${workflow.input.index}")
@@ -184,15 +185,15 @@ private static ConductorWorkflow<Map<String, Object>> createQueryWorkflow(Workfl
184185
.embeddingModelProvider("${workflow.input.llmProvider}")
185186
.embeddingModel("${workflow.input.embeddingModel}")
186187
.query("${workflow.input.question}")
187-
.topK(5);
188+
.maxResults(5);
188189

189190
workflow.add(searchTask);
190191

191192
// Step 2: Generate answer using retrieved context
192193
LlmChatComplete generateAnswer = new LlmChatComplete("generate_answer", "answer_ref")
193194
.llmProvider("${workflow.input.llmProvider}")
194195
.model("${workflow.input.chatModel}")
195-
.promptName("rag-answer-prompt")
196+
.instructions("rag-answer-prompt")
196197
.promptVariables(Map.of(
197198
"question", "${workflow.input.question}",
198199
"context", "${search_ref.output.results}"

examples/src/main/java/io/orkes/conductor/sdk/examples/agentic/VectorDbExample.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717
import java.util.Map;
1818
import java.util.concurrent.TimeUnit;
1919

20+
import org.conductoross.conductor.sdk.ai.LlmGenerateEmbeddings;
21+
import org.conductoross.conductor.sdk.ai.LlmIndexText;
22+
import org.conductoross.conductor.sdk.ai.LlmSearchIndex;
23+
2024
import com.netflix.conductor.client.http.ConductorClient;
2125
import com.netflix.conductor.common.run.Workflow;
2226
import com.netflix.conductor.sdk.workflow.def.ConductorWorkflow;
23-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmGenerateEmbeddings;
24-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmIndexDocument;
25-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmSearchIndex;
2627
import com.netflix.conductor.sdk.workflow.executor.WorkflowExecutor;
2728

2829
import io.orkes.conductor.sdk.examples.util.ClientUtil;
@@ -239,7 +240,7 @@ private static ConductorWorkflow<Map<String, Object>> createIndexWorkflow(Workfl
239240
workflow.setOwnerEmail("examples@conductor-oss.org");
240241
workflow.setDescription("Index text into vector database");
241242

242-
LlmIndexDocument indexTask = new LlmIndexDocument("index_text", "index_ref")
243+
LlmIndexText indexTask = new LlmIndexText("index_text", "index_ref")
243244
.vectorDb("${workflow.input.vectorDb}")
244245
.namespace("${workflow.input.namespace}")
245246
.index("${workflow.input.index}")
@@ -276,7 +277,7 @@ private static ConductorWorkflow<Map<String, Object>> createSearchWorkflow(Workf
276277
.embeddingModelProvider("${workflow.input.llmProvider}")
277278
.embeddingModel("${workflow.input.embeddingModel}")
278279
.query("${workflow.input.query}")
279-
.topK(5);
280+
.maxResults(5);
280281

281282
workflow.add(searchTask);
282283

examples/src/main/java/io/orkes/conductor/sdk/examples/validation/SdkValidationTest.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
import java.util.Map;
1818
import java.util.concurrent.TimeUnit;
1919

20+
import org.conductoross.conductor.sdk.ai.LlmChatComplete;
21+
import org.conductoross.conductor.sdk.ai.LlmGenerateEmbeddings;
22+
import org.conductoross.conductor.sdk.ai.LlmIndexText;
23+
import org.conductoross.conductor.sdk.ai.LlmSearchIndex;
24+
import org.conductoross.conductor.sdk.ai.LlmTextComplete;
25+
2026
import com.netflix.conductor.client.automator.TaskRunnerConfigurer;
2127
import com.netflix.conductor.client.http.ConductorClient;
2228
import com.netflix.conductor.client.http.MetadataClient;
@@ -31,11 +37,6 @@
3137
import com.netflix.conductor.sdk.workflow.def.tasks.DoWhile;
3238
import com.netflix.conductor.sdk.workflow.def.tasks.ForkJoin;
3339
import com.netflix.conductor.sdk.workflow.def.tasks.Http;
34-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmChatComplete;
35-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmGenerateEmbeddings;
36-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmIndexDocument;
37-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmSearchIndex;
38-
import com.netflix.conductor.sdk.workflow.def.tasks.LlmTextComplete;
3940
import com.netflix.conductor.sdk.workflow.def.tasks.SetVariable;
4041
import com.netflix.conductor.sdk.workflow.def.tasks.SimpleTask;
4142
import com.netflix.conductor.sdk.workflow.def.tasks.Switch;
@@ -114,20 +115,20 @@ public static void main(String[] args) {
114115
.temperature(0.7);
115116
pass("LlmChatComplete instantiated");
116117

117-
LlmIndexDocument indexTask = new LlmIndexDocument("test_index", "index_ref")
118+
LlmIndexText indexTask = new LlmIndexText("test_index", "index_ref")
118119
.vectorDb("pinecone")
119120
.namespace("test")
120121
.index("test-index")
121122
.embeddingModel("text-embedding-ada-002")
122123
.text("test document");
123-
pass("LlmIndexDocument instantiated");
124+
pass("LlmIndexText instantiated");
124125

125126
LlmSearchIndex searchTask = new LlmSearchIndex("test_search", "search_ref")
126127
.vectorDb("pinecone")
127128
.namespace("test")
128129
.index("test-index")
129130
.query("test query")
130-
.topK(5);
131+
.maxResults(5);
131132
pass("LlmSearchIndex instantiated");
132133

133134
LlmGenerateEmbeddings embedTask = new LlmGenerateEmbeddings("test_embed", "embed_ref")

0 commit comments

Comments
 (0)