Class GRPCRule


public abstract class GRPCRule extends RemoteRule
Base class fur rules running on external servers; see gRPC service definition in languagetool-core/src/main/proto/ml_server.proto See #create(Language, ResourceBundle, RemoteRuleConfig, boolean, String, String, Map) for an easy way to add rules; return rule in Language::getRelevantRemoteRules add it like this:
   public List<Rule> getRelevantRemoteRules(ResourceBundle messageBundle, List<RemoteRuleConfig> configs, GlobalConfig globalConfig, UserConfig userConfig, Language motherTongue, List<Language> altLanguages) throws IOException {
     List<Rule> rules = new ArrayList<>(super.getRelevantRemoteRules(
     messageBundle, configs, globalConfig, userConfig, motherTongue, altLanguages));
     Rule exampleRule = GRPCRule.create(messageBundle,
       RemoteRuleConfig.getRelevantConfig("EXAMPLE_ID", configs),
      "EXAMPLE_ID", "example_rule_id",
      Collections.singletonMap("example_match_id", "example_rule_message"));
     rules.add(exampleRule);
     return rules;
   }
  
  • Field Details

    • CONFIG_TYPE

      public static final String CONFIG_TYPE
      See Also:
    • logger

      private static final org.slf4j.Logger logger
    • DEFAULT_BATCH_SIZE

      private static final int DEFAULT_BATCH_SIZE
      See Also:
    • WHITESPACE_REGEX

      public static final Pattern WHITESPACE_REGEX
    • DEFAULT_DESCRIPTION

      private static final String DEFAULT_DESCRIPTION
      See Also:
    • servers

      private static final com.google.common.cache.LoadingCache<RemoteRuleConfig,GRPCRule.Connection> servers
    • conn

      private final GRPCRule.Connection conn
    • batchSize

      private final int batchSize
    • sendAnalyzedData

      private final boolean sendAnalyzedData
    • maxSentenceLength

      private int maxSentenceLength
  • Constructor Details

  • Method Details

    • cleanID

      public static String cleanID(String id, Language lang)
    • prepareRequest

      protected RemoteRule.RemoteRequest prepareRequest(List<AnalyzedSentence> sentences, @Nullable Long textSessionId)
      Description copied from class: RemoteRule
      run local preprocessing steps (or just store sentences)
      Specified by:
      prepareRequest in class RemoteRule
      Parameters:
      sentences - text to process
      textSessionId - session ID for caching, partial rollout, A/B testing
      Returns:
      parameter for executeRequest/fallbackResults
    • nonEmpty

      @Nullable private static String nonEmpty(String s)
    • executeRequest

      protected Callable<RemoteRuleResult> executeRequest(RemoteRule.RemoteRequest requestArg, long timeoutMilliseconds) throws TimeoutException
      Specified by:
      executeRequest in class RemoteRule
      Parameters:
      requestArg - returned by prepareRequest
      timeoutMilliseconds - timeout for this operation, <=0 -> unlimited
      Returns:
      callable that sends request, parses and returns result for this remote rule
      Throws:
      TimeoutException - if timeout was exceeded
    • getRuleMatches

      private List<RuleMatch> getRuleMatches(List<AnalyzedSentence> sentences, List<MLServerProto.MatchResponse> responses)
    • getMessage

      protected abstract String getMessage(MLServerProto.Match match, AnalyzedSentence sentence)
      messages can be provided by the ML server or the Java client fill them in here or leave this empty if the server takes care of it
    • fallbackResults

      protected RemoteRuleResult fallbackResults(RemoteRule.RemoteRequest request)
      Description copied from class: RemoteRule
      fallback if executeRequest times out or throws an error
      Specified by:
      fallbackResults in class RemoteRule
      Parameters:
      request - returned by prepareRequest
      Returns:
      local results for this rule
    • create

      public static GRPCRule create(Language language, ResourceBundle messages, RemoteRuleConfig config, boolean inputLogging, String id, String descriptionKey, Map<String,String> messagesByID)
      Helper method to create instances of RemoteMLRule
      Parameters:
      language - rule language
      messages - for i18n; = JLanguageTool.getMessageBundle(lang)
      config - configuration for remote rule server; options: secure, clientKey, clientCertificate, rootCertificate use RemoteRuleConfig.getRelevantConfig(id, configs) to load this in Language::getRelevantRemoteRules
      id - ID of rule
      descriptionKey - key in MessageBundle.properties for rule description
      messagesByID - mapping match.sub_id -> key in MessageBundle.properties for RuleMatch's message
      Returns:
      instance of RemoteMLRule
    • create

      public static GRPCRule create(Language language, RemoteRuleConfig config, boolean inputLogging, String id, String description, Map<String,String> messagesByID)
      Helper method to create instances of RemoteMLRule
      Parameters:
      language - rule language
      config - configuration for remote rule server; options: secure, clientKey, clientCertificate, rootCertificate use RemoteRuleConfig.getRelevantConfig(id, configs) to load this in Language::getRelevantRemoteRules
      id - ID of rule
      description - rule description
      messagesByID - mapping match.sub_id to RuleMatch's message
      Returns:
      instance of RemoteMLRule
    • createAll

      public static List<GRPCRule> createAll(Language language, List<RemoteRuleConfig> configs, boolean inputLogging, String prefix, String defaultDescription)
    • createAll

      public static List<GRPCRule> createAll(Language language, List<RemoteRuleConfig> configs, boolean inputLogging)