summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Peter Christen <mc@yacy.net>2025-11-23 23:56:26 +0100
committerMichael Peter Christen <mc@yacy.net>2025-11-23 23:56:26 +0100
commit46093620cdea16b1598287d08442e0cbe39bf970 (patch)
tree991ca3889de1f5e748918d7add1f0315205ebf39
parent32d8d820a8dd7080c9bc52e773d84a46cc26d9e5 (diff)
added search result - to - markdown in RAG
-rw-r--r--source/net/yacy/http/servlets/RAGProxyServlet.java54
1 files changed, 32 insertions, 22 deletions
diff --git a/source/net/yacy/http/servlets/RAGProxyServlet.java b/source/net/yacy/http/servlets/RAGProxyServlet.java
index 5553b75f1..532e76a98 100644
--- a/source/net/yacy/http/servlets/RAGProxyServlet.java
+++ b/source/net/yacy/http/servlets/RAGProxyServlet.java
@@ -133,8 +133,8 @@ public class RAGProxyServlet extends HttpServlet {
// get messages
JSONArray messages = bodyObject.optJSONArray("messages");
- JSONObject systemObject = messages.getJSONObject(0);
- String system = systemObject.optString("content", ""); // the system prompt
+ //JSONObject systemObject = messages.getJSONObject(0);
+ //String system = systemObject.optString("content", ""); // the system prompt
JSONObject userObject = messages.getJSONObject(messages.length() - 1);
String user = userObject.optString("content", ""); // this is the latest prompt
@@ -142,19 +142,9 @@ public class RAGProxyServlet extends HttpServlet {
if (rag) {
// modify system and user prompt here in bodyObject to enable RAG
String query = this.searchWordsForPrompt(llm4tldr.llm, llm4tldr.model, user);
- out.print(responseLine("Searching for '" + query + "'\n\n").toString() + "\n");
- out.flush();
- JSONArray searchResults = searchResults(query, 4, true);
- out.print(responseLine("\n").toString());
- out.flush();
- system += LLM_SYSTEM_PREFIX;
+ String searchResultMarkdown = searchResultsAsMarkdown(query, 4);
user += LLM_USER_PREFIX;
- for (int i = 0; i < searchResults.length(); i++) {
- JSONObject r = searchResults.getJSONObject(i);
- String snippet = r.optString("snippet", "");
- user += snippet + "\n\n";
- }
- systemObject.put("content", system);
+ user += searchResultMarkdown;
userObject.put("content", user);
// write back modified bodyMap to body
@@ -175,21 +165,20 @@ public class RAGProxyServlet extends HttpServlet {
try (OutputStream os = conn.getOutputStream()) {
os.write(body.getBytes());
os.flush();
- }
+ } // here we wait for the response from upstream
// write back response of the back-end service to the client; use status of
// backend-response
- int status = conn.getResponseCode();
+ final int status = conn.getResponseCode();
// String rmessage = conn.getResponseMessage();
hresponse.setStatus(status);
if (status == 200) {
// read the response of the back-end line-by-line and write it to the client line-by-line
- BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ final BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
- out.print(inputLine); // i.e. data:
- // {"id":"chatcmpl-69","object":"chat.completion.chunk","created":1715908287,"model":"llama3:8b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"ߘŠ"},"finish_reason":null}]}
+ out.print(inputLine); // i.e. data: {"id":"chatcmpl-69","object":"chat.completion.chunk","created":1715908287,"model":"llama3:8b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"ߘŠ"},"finish_reason":null}]}
out.flush();
}
in.close();
@@ -225,12 +214,12 @@ public class RAGProxyServlet extends HttpServlet {
SolrDocument doc = i.next();
final JSONObject result = new JSONObject(true);
String url = (String) doc.getFieldValue(CollectionSchema.sku.getSolrFieldName());
- result.put("url", url);
+ result.put("url", url == null ? "" : url.trim());
String title = getOneString(doc, CollectionSchema.title);
- result.put("title", title == null ? url : title);
+ result.put("title", title == null ? "" : title.trim());
if (includeSnippet) {
String text = (String) doc.getFieldValue(CollectionSchema.text_t.getSolrFieldName());
- result.put("snippet", text == null ? "" : text);
+ result.put("snippet", text == null ? "" : text.trim());
}
results.put(result);
} catch (JSONException e) {
@@ -243,6 +232,27 @@ public class RAGProxyServlet extends HttpServlet {
}
}
+ public static String searchResultsAsMarkdown(String query, int count) {
+ JSONArray searchResults = searchResults(query, count, true);
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < searchResults.length(); i++) {
+ try {
+ JSONObject r = searchResults.getJSONObject(i);
+ String title = r.optString("title", "");
+ String url = r.optString("url", "");
+ String snippet = r.optString("snippet", "");
+ if (title.length() > 0 && snippet.length() > 0) {
+ sb.append("## ").append(title).append("\n");
+ sb.append(snippet).append("\n");
+ if (url.length() > 0) sb.append("Source: ").append(url).append("\n");
+ sb.append("\n\n");
+ }
+ } catch (JSONException e) {}
+ }
+ return sb.toString();
+ }
+
private static String getOneString(SolrDocument doc, CollectionSchema field) {
assert field.isMultiValued();
assert field.getType() == SolrType.string || field.getType() == SolrType.text_general;