Skip to content

Commit

Permalink
license fix and Searxng temporarily fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin7-1 committed Dec 22, 2024
1 parent e14db8d commit 3ff275e
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,26 @@

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.honton.chas</groupId>
<artifactId>license-maven-plugin</artifactId>
<configuration>
<acceptableLicenses combine.children="append">
<!-- due to excludes/includes above -->
<license>
<name>Eclipse Public License</name>
<url>http://www.eclipse.org/legal/epl-v10.html</url>
</license>
<license>
<name>GNU Lesser General Public License</name>
<url>http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html</url>
</license>
</acceptableLicenses>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,27 @@
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.honton.chas</groupId>
<artifactId>license-maven-plugin</artifactId>
<configuration>
<acceptableLicenses combine.children="append">
<!-- due to excludes/includes above -->
<license>
<name>Eclipse Public License</name>
<url>http://www.eclipse.org/legal/epl-v10.html</url>
</license>
<license>
<name>GNU Lesser General Public License</name>
<url>http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html</url>
</license>
</acceptableLicenses>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
package dev.langchain4j.community.web.search.searxng;

import static dev.langchain4j.internal.Utils.copyIfNotNull;
import static dev.langchain4j.internal.Utils.getOrDefault;
import static dev.langchain4j.internal.ValidationUtils.ensureNotNull;

import dev.langchain4j.web.search.WebSearchEngine;
import dev.langchain4j.web.search.WebSearchInformationResult;
import dev.langchain4j.web.search.WebSearchOrganicResult;
import dev.langchain4j.web.search.WebSearchRequest;
import dev.langchain4j.web.search.WebSearchResults;

import java.net.URI;
import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static dev.langchain4j.internal.Utils.copyIfNotNull;
import static dev.langchain4j.internal.Utils.getOrDefault;
import static dev.langchain4j.internal.ValidationUtils.ensureNotNull;

/**
* Represents a SearXNG instance with its API enabled as a {@code WebSearchEngine}.
*/
Expand All @@ -26,7 +25,12 @@ public class SearXNGWebSearchEngine implements WebSearchEngine {

private SearXNGWebSearchEngine(Builder builder) {
ensureNotNull(builder.baseUrl, "baseUrl");
this.client = new SearXNGClient(builder.baseUrl, getOrDefault(builder.duration, Duration.ofSeconds(10L)), builder.logRequests, builder.logResponses, builder.optionalParams);
this.client = new SearXNGClient(
builder.baseUrl,
getOrDefault(builder.duration, Duration.ofSeconds(10L)),
builder.logRequests,
builder.logResponses,
builder.optionalParams);
}

/**
Expand Down Expand Up @@ -56,7 +60,13 @@ private static Map<String, String> extractMetadata(SearXNGResult result) {
}

private static WebSearchOrganicResult toWebSearchOrganicResult(SearXNGResult result) {
return WebSearchOrganicResult.from(result.getTitle(), URI.create(result.getUrl()), result.getContent(), null, extractMetadata(result));
// FIXME: temporarily fix URI illegal character, raise a issue to solve it.
String url = result.getUrl();
int illegalChar = url.indexOf('#');
url = illegalChar == -1 ? url : url.substring(0, illegalChar);

return WebSearchOrganicResult.from(
result.getTitle(), URI.create(url), result.getContent(), null, extractMetadata(result));
}

private static boolean hasValue(String value) {
Expand All @@ -75,8 +85,13 @@ private static int maxResults(WebSearchRequest webSearchRequest) {
public WebSearchResults search(WebSearchRequest webSearchRequest) {
final SearXNGResponse results = client.search(webSearchRequest);

return WebSearchResults.from(WebSearchInformationResult.from(results.getNumberOfResults()),
results.getResults().stream().filter(r -> includeResult(r)).map(r -> toWebSearchOrganicResult(r)).limit(maxResults(webSearchRequest)).collect(Collectors.toList()));
return WebSearchResults.from(
WebSearchInformationResult.from(results.getNumberOfResults()),
results.getResults().stream()
.filter(SearXNGWebSearchEngine::includeResult)
.map(SearXNGWebSearchEngine::toWebSearchOrganicResult)
.limit(maxResults(webSearchRequest))
.collect(Collectors.toList()));
}

/**
Expand Down

0 comments on commit 3ff275e

Please sign in to comment.