Skip to content

Commit

Permalink
prompt template as parameter
Browse files Browse the repository at this point in the history
Signed-off-by: Hailong Cui <ihailong@amazon.com>
  • Loading branch information
Hailong-am committed Jan 10, 2024
1 parent ee12496 commit f3c5ee0
Showing 1 changed file with 59 additions and 37 deletions.
96 changes: 59 additions & 37 deletions src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,49 @@ public class IndexRoutingTool extends VectorDBTool {
+ "This tool take user plain original question as input and return list of most related indexes or `Not sure`. "
+ "If the tool returns `Not sure`, mark it as final answer and ask Human to provide index name";

private static final String DEFAULT_PROMPT_TEMPLATE = String
.format(

Check warning on line 54 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L53-L54

Added lines #L53 - L54 were not covered by tests
Locale.ROOT,
"Human: %s\\nAssistant:",
"You are an experienced engineer in OpenSearch and ElasticSearch. \n"
+ "\n"
+ "Given a question, your task is to choose the relevant indexes from a list of indexes.\n"
+ "\n"
+ "For every index, you will be given the index mapping, followed by sample data from the index.\n"
+ "\n"
+ "The data format is like:\n"
+ "\n"
+ "index-1: Index Mappings:\n"
+ "mappings of index-1\n"
+ "Sample data:\n"
+ "data from index-1\n"
+ "---\n"
+ "index-2: Index Mappings:\n"
+ "mappings of index-2\n"
+ "Sample data:\n"
+ "data from index-2\n"
+ "---\n"
+ "...\n"
+ "\n"
+ "Now the actual index mappings and sample data begins:\n"
+ "{summaries}\n"
+ "\n"
+ "-------------------\n"
+ "\n"
+ "Format the output as a comma-separated sequence, e.g. index-1, index-2, index-3. If no indexes \n"
+ "appear relevant to the question, return the empty string ''.\n"
+ "\n"
+ "Just return the index names, nothing else. \n"
+ "If you are not sure, just return 'Not sure', nothing else.\n"
+ "\n"
+ "Question: {question}\n"
+ "Answer:"
);

public static final int DEFAULT_K = 5;
public static String EMBEDDING_MODEL_ID = "embedding_model_id";
public static String INFERENCE_MODEL_ID = "inference_model_id";
public static String PROMPT_TEMPLATE = "prompt_template";

Check warning on line 95 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L93-L95

Added lines #L93 - L95 were not covered by tests

@Setter

Check warning on line 97 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L97

Added line #L97 was not covered by tests
@Getter
Expand All @@ -67,6 +107,9 @@ public class IndexRoutingTool extends VectorDBTool {

private final MLClients mlClients;

@Setter
private String promptTemplate;

public IndexRoutingTool(
Client client,
NamedXContentRegistry xContentRegistry,
Expand Down Expand Up @@ -208,43 +251,8 @@ private Optional<String> findWithSimilarity(String predictedIndex, Collection<St
}

private String buildPrompt(String summaryString, String question) {
// TODO set template as toolSpec
String defaultTemplate = "Human: You are an experienced engineer in OpenSearch and ElasticSearch. \n"
+ "\n"
+ " Given a question, your task is to choose the relevant indexes from a list of indexes.\n"
+ "\n"
+ " For every index, you will be given the index mapping, followed by sample data from the index.\n"
+ "\n"
+ " The data format is like:\n"
+ "\n"
+ " index-1: Index Mappings:\n"
+ " mappings of index-1\n"
+ " Sample data:\n"
+ " data from index-1\n"
+ " ---\n"
+ " index-2: Index Mappings:\n"
+ " mappings of index-2\n"
+ " Sample data:\n"
+ " data from index-2\n"
+ " ---\n"
+ " ...\n"
+ "\n"
+ " Now the actual index mappings and sample data begins:\n"
+ " ${summaries}\n"
+ "\n"
+ " -------------------\n"
+ "\n"
+ " Format the output as a comma-separated sequence, e.g. index-1, index-2, index-3. If no indexes \n"
+ " appear relevant to the question, return the empty string ''.\n"
+ "\n"
+ " Just return the index names, nothing else. \n"
+ " If you are not sure, just return 'Not sure', nothing else.\n"
+ "\n"
+ " Question: ${question}\n"
+ " Answer:\n\nAssistant:";

Map<String, String> params = Map.of("question", question, "summaries", summaryString);
return new StringSubstitutor(params).replace(defaultTemplate);
return new StringSubstitutor(params).replace(promptTemplate);

Check warning on line 255 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L254-L255

Added lines #L254 - L255 were not covered by tests
}

@Override
Expand Down Expand Up @@ -280,14 +288,28 @@ public void init(Client client, NamedXContentRegistry xContentRegistry) {
public IndexRoutingTool create(Map<String, Object> params) {
String embeddingModelId = (String) params.get(EMBEDDING_MODEL_ID);
String inferenceModelId = (String) params.get(INFERENCE_MODEL_ID);

Check warning on line 290 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L289-L290

Added lines #L289 - L290 were not covered by tests
String promptTemplate = params.get(PROMPT_TEMPLATE) == null ? DEFAULT_PROMPT_TEMPLATE : (String) params.get(PROMPT_TEMPLATE);
Integer docSize = params.containsKey(DOC_SIZE_FIELD) ? Integer.parseInt((String) params.get(DOC_SIZE_FIELD)) : DEFAULT_K;
Integer k = params.containsKey(K_FIELD) ? Integer.parseInt((String) params.get(K_FIELD)) : DEFAULT_K;
return new IndexRoutingTool(client, xContentRegistry, docSize, k, embeddingModelId, inferenceModelId);
IndexRoutingTool tool = new IndexRoutingTool(client, xContentRegistry, docSize, k, embeddingModelId, inferenceModelId);
tool.setPromptTemplate(promptTemplate);

Check warning on line 295 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L294-L295

Added lines #L294 - L295 were not covered by tests

return tool;

Check warning on line 297 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L297

Added line #L297 was not covered by tests
}

@Override
public String getDefaultDescription() {
return DEFAULT_DESCRIPTION;

Check warning on line 302 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L302

Added line #L302 was not covered by tests
}

@Override
public String getDefaultType() {
return TYPE;

Check warning on line 307 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L307

Added line #L307 was not covered by tests
}

@Override
public String getDefaultVersion() {
return null;

Check warning on line 312 in src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearch/agent/tools/IndexRoutingTool.java#L312

Added line #L312 was not covered by tests
}
}
}

0 comments on commit f3c5ee0

Please sign in to comment.