From 8b3a454a15bf6e3ecbb67c41bb881180ae9a7ada Mon Sep 17 00:00:00 2001 From: tobjend Date: Mon, 13 Jul 2026 01:12:54 +0200 Subject: [PATCH] feat: enable idregex_refine by default + AST rewrite of _count_optionals - idregex_refine=True default across all entry points + CLI - Added --no-idregex-refine flag to CLI - Rewrote _count_optionals from SORE string parser to AST walker - Added _is_pure_bag() helper for bag detection - Updated _should_try_idregex() to trigger on pure Plus(Alt) bags - Updated tests for AST-based _count_optionals - Added RAGSAK v4 experiment results --- bex/tag_preprocessor/analyze.py | 94 +- .../results/round20_ast_verify/ragsak_v4.json | 4338 +++++++++++++++++ .../results/round20_ast_verify/ragsak_v4.log | 264 + tests/test_analyze.py | 45 +- 4 files changed, 4694 insertions(+), 47 deletions(-) create mode 100644 experiments/results/round20_ast_verify/ragsak_v4.json create mode 100644 experiments/results/round20_ast_verify/ragsak_v4.log diff --git a/bex/tag_preprocessor/analyze.py b/bex/tag_preprocessor/analyze.py index 29e8dc5..27a6137 100644 --- a/bex/tag_preprocessor/analyze.py +++ b/bex/tag_preprocessor/analyze.py @@ -351,53 +351,71 @@ def _recursive_split(symbol_seqs, min_subgroup=3, max_depth=3, _depth=0, cluster def _count_optionals(grammar): - """Count optional parts in a SORE grammar. + """Count optional/repetition parts in an AST grammar. - Returns (n_optional, n_concat_parts) counting only top-level parts - of concatenations that end with ?. A grammar like a?.b?.c?.d?.e? - has 5 optional parts out of 5 concat parts = 1.0 ratio (over-approx). - A grammar like a.(b|c).(d|e) has 0 optional parts = 0.0 ratio (structured). + Returns (n_optional, n_concat_parts). A flat optional chain like + a?.b?.c?.d?.e? has 5 optional parts out of 5 concat parts = 1.0 ratio + (over-approx, bag-like). A structured grammar a.(b|c).(d|e) has 0 + optional parts = 0.0 ratio. + + Walks the AST (Symbol/Concat/Alt/Optional/Plus/Star/Empty). Top-level + concatenation parts that are Optional/Star/Plus count as "optional". """ - import re - # Split on top-level dots (concatenation) - parts = [] - depth = 0 - cur = [] - for ch in grammar: - if ch == '(': - depth += 1 - cur.append(ch) - elif ch == ')': - depth -= 1 - cur.append(ch) - elif ch == '.' and depth == 0: - parts.append(''.join(cur)) - cur = [] - else: - cur.append(ch) - parts.append(''.join(cur)) + from bex.grammar import Concat, Alt, Optional, Plus, Star, Symbol, Empty - # Count parts ending with ? (but not +?) - n_optional = sum(1 for p in parts if p.endswith('?') and not p.endswith('+?')) - n_total = len(parts) - return n_optional, n_total + if grammar is None or isinstance(grammar, Empty): + return 0, 0 + if isinstance(grammar, Concat): + n_opt = 0 + for p in grammar.parts: + if isinstance(p, Optional): + n_opt += 1 + elif isinstance(p, (Star, Plus)): + n_opt += 0 # structure, not optional + else: + o, _ = _count_optionals(p) + n_opt += o + return n_opt, len(grammar.parts) + if isinstance(grammar, Optional): + # a true optional counts as one optional part + return 1, 1 + if isinstance(grammar, (Star, Plus)): + # repetition provides structure, not optionality + return 0, 1 + if isinstance(grammar, Alt): + # an alternation is one structured part (not optional) + return 0, 1 + # Symbol / Epsilon: one concrete part, not optional + return 0, 1 + + +def _is_pure_bag(grammar): + """A pure bag is a single Plus(Alt(...)) of >=2 alternatives (no ordering).""" + from bex.grammar import Plus, Alt, Symbol, Empty + return (isinstance(grammar, Plus) + and isinstance(grammar.child, Alt) + and len(grammar.child.parts) >= 2 + and all(isinstance(p, (Symbol, Empty)) for p in grammar.child.parts)) def _should_try_idregex(grammar, n_methods): """Decide if iDRegEx refinement is worth trying. - Heuristic: only try if the group is small (≤10 methods) AND - the CRX grammar is a flat optional chain (high optional ratio). + Heuristic: only try if the group is small (≤10 methods) AND the CRX + grammar is bag-like — either a flat optional chain (high optional ratio) + or a pure Plus(Alt) bag (no ordering). """ if n_methods > 10: return False + if _is_pure_bag(grammar): + return True n_optional, n_total = _count_optionals(grammar) if n_total < 3: return False return n_optional / n_total > 0.5 -def _infer_group(label, group_seqs, group_files, project_root, min_coverage, prefer, kmax, N, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, split_mixed=False, idregex_refine=False, cluster_method='first-symbol', decompose=False, max_seq_length=5): +def _infer_group(label, group_seqs, group_files, project_root, min_coverage, prefer, kmax, N, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, split_mixed=False, idregex_refine=True, cluster_method='first-symbol', decompose=False, max_seq_length=5): """Infer grammar for one package group. Module-level for ProcessPoolExecutor.""" filtered = frequency_filter(group_seqs, min_coverage=min_coverage) imports = _extract_imports(group_files) @@ -490,7 +508,7 @@ def _infer_group(label, group_seqs, group_files, project_root, min_coverage, pre return (label, result, len(filtered), meta) -def analyze_by_package(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, min_pkg_size=3, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, split_mixed=False, idregex_refine=False, cluster_method='first-symbol', decompose=False, max_seq_length=5): +def analyze_by_package(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, min_pkg_size=3, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, split_mixed=False, idregex_refine=True, cluster_method='first-symbol', decompose=False, max_seq_length=5): """Preprocess and group by package directory, infer per group. Groups methods by their file's relative directory path, merging @@ -627,7 +645,7 @@ def _filter_glob(files, include=None, exclude=None): return files -def analyze_by_reduce(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, reduce_threshold=0.15, idregex_refine=False, cluster_method='first-symbol', decompose=False, max_seq_length=5): +def analyze_by_reduce(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, reduce_threshold=0.15, idregex_refine=True, cluster_method='first-symbol', decompose=False, max_seq_length=5): """Reduce-style analysis: group by directory, then merge similar groups. Uses Algorithm 4 (Reduce, TODS 2010) to merge directories with similar @@ -680,7 +698,7 @@ def analyze_by_reduce(file_paths, extension, project_root="", min_coverage=DEFAU return results -def analyze_by_ilocal(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, context_strategy="dir", reduce=True, idregex_refine=False, cluster_method='first-symbol', decompose=False, max_seq_length=5): +def analyze_by_ilocal(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0, context_strategy="dir", reduce=True, idregex_refine=True, cluster_method='first-symbol', decompose=False, max_seq_length=5): """iLocal-style analysis: extract (context, sequence) pairs, reduce, infer. Instead of hard-coding directory as grouping key, this extracts contexts @@ -761,7 +779,7 @@ def analyze_directory( max_seq_length=4, reduce_threshold=0.15, split_mixed=False, - idregex_refine=False, + idregex_refine=True, cluster_method='first-symbol', ): """Scan a directory and run analysis for each language found. @@ -1052,8 +1070,12 @@ def _parse_args(argv=None): help="Maximum sequence length after decomposition (default: 4)", ) parser.add_argument( - "--idregex-refine", action="store_true", - help="Run iDRegEx on small groups (≤10 methods) where CRX grammar has many optionals — picks tighter grammar by lang_size", + "--idregex-refine", action="store_true", default=True, + help="Run iDRegEx on small groups (≤10 methods) where CRX grammar has many optionals — picks tighter grammar by lang_size (default: on)", + ) + parser.add_argument( + "--no-idregex-refine", dest="idregex_refine", action="store_false", + help="Disable iDRegEx refinement on small groups", ) return parser.parse_args(argv) diff --git a/experiments/results/round20_ast_verify/ragsak_v4.json b/experiments/results/round20_ast_verify/ragsak_v4.json new file mode 100644 index 0000000..6c18a52 --- /dev/null +++ b/experiments/results/round20_ast_verify/ragsak_v4.json @@ -0,0 +1,4338 @@ +[ + { + "language": ".kt", + "conventions": [ + { + "label": "agents", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"slot\"? (\"defaultCapabilityId\" | \"summarize\")? \"ToolInvocationRequest\"? \"ToolingRequest\"? \"ToolInvocationResult\"? (\"String\" | \"answer\" | \"any\" | \"assertEquals\" | \"capture\" | \"captured\" | \"every\" | \"generateText\" | \"invoke\" | \"invokeTools\" | \"promptRunner\" | \"toolProfile\" | \"verify\")?+ \"prompt\"? \"contains\"?+", + "mdl_score": 142012, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityHandler", + "import eu.corentic.springrag.agent.capability.AgentCapabilityInvocationGateway", + "import com.embabel.agent.api.common.ActionContext", + "import com.embabel.agent.api.common.PromptRunner", + "import eu.corentic.springrag.agent.tooling.embabel.DEFAULT_TOOL_PROFILE", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationAction", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationRequest", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationResult", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.slot", + "import io.mockk.verify", + "import kotlin.test.assertEquals", + "import org.junit.jupiter.api.Test" + ], + "arg_patterns": {} + }, + { + "label": "agents/capability/ports/src/main/kotlin/eu/corentic/springrag/agent/capability", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"AgentExecutionContext\"? \"listCapabilities\"? \"DescribedAgentCapability\"? \"firstOrNull\"?+ \"TransportExposedAgentCapability\"? \"id\"? \"return AgentCapabilityDescriptor(\n id = id,\n capabilityType = capabilityType,\n displayName = describedCapability?.displayName ?: id,\n description = describedCapability?.description,\n exposedOverHttp = exposedCapability?.exposedOverHttp ?: false,\n exposedOverMcp = exposedCapability?.exposedOverMcp ?: false\n )\"? \"AgentCapabilityDescriptor\"? \"displayName\"? \"description\"? \"exposedOverHttp\"? \"exposedOverMcp\"?", + "mdl_score": 1553, + "imports": [], + "arg_patterns": {} + }, + { + "label": "agents/capability/support/src/main/kotlin/eu/corentic/springrag/agent/capability/support", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"resolve\"?+ \"flatMap\"?+ \"newVirtualThreadPerTaskExecutor\"?+ (\"DefaultAgentCapabilityDirectory\" | \"defaultCapabilityId\")?+ \"capabilityIdSelector\"? \"capabilityDescriptors\"?+ \"asCoroutineDispatcher\"?+ \"authorize\"?+ \"distinctBy\"?+ (\"AgentCapabilityDescriptor\" | \"capabilityType\" | \"compareBy\" | \"id\" | \"sortedWith\" | \"thenBy\")?+ \"return capability.invoke(request)\"? \"invoke\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDirectory", + "import eu.corentic.springrag.agent.capability.AgentCapabilityRegistry", + "import kotlinx.coroutines.CoroutineDispatcher", + "import kotlinx.coroutines.asCoroutineDispatcher", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import java.util.concurrent.Executors", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.AgentCapabilityHandler", + "import eu.corentic.springrag.agent.capability.AgentCapabilityInvocationAuthorizer", + "import eu.corentic.springrag.agent.capability.AgentCapabilityInvocationGateway", + "import eu.corentic.springrag.agent.capability.AgentCapabilityResolver" + ], + "arg_patterns": {} + }, + { + "label": "agents/capability/support/src/test/kotlin/eu/corentic/springrag/agent/capability/support", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"runTest\"? \"TestRequest\"? (\"AgentCapabilityDescriptor\" | \"DefaultAgentCapabilityDirectory\" | \"IllegalStateException\" | \"assertEquals\" | \"assertFailsWith\" | \"authorize\" | \"capabilityDescriptors\" | \"coEvery\" | \"coVerify\" | \"defaultCapabilityId\" | \"every\" | \"id\" | \"invoke\" | \"listOf\" | \"message\" | \"resolve\" | \"verify\")?+ (\"any\" | \"listCapabilities\")?+", + "mdl_score": 790670, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.AgentCapabilityRegistry", + "import io.mockk.every", + "import io.mockk.mockk", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.agent.capability.AgentCapabilityHandler", + "import eu.corentic.springrag.agent.capability.AgentCapabilityInvocationAuthorizer", + "import eu.corentic.springrag.agent.capability.AgentCapabilityResolver", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import io.mockk.verify", + "import kotlinx.coroutines.test.runTest", + "import kotlin.test.Test", + "import kotlin.test.assertEquals", + "import kotlin.test.assertFailsWith" + ], + "arg_patterns": {} + }, + { + "label": "agents/examples/simple-rag/src/main/kotlin/eu/corentic/springrag/example/rag/simple", + "method_count": 9, + "algorithm": "CRX", + "grammar": "root ::= \"prompt\"?+ \"if\"? \"system\"?+ \"isEmpty\"?+ \"user\"?+ \"call\"?+ \"content\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.model.VectorChunk", + "import org.slf4j.LoggerFactory", + "import org.springframework.ai.chat.client.ChatClient", + "import tools.jackson.databind.ObjectMapper", + "import eu.corentic.springrag.agent.rag.RagAgent", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.rag.support.RagDocumentSupport", + "import eu.corentic.springrag.model.ChatResponse", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.RetrievalPort", + "import kotlinx.coroutines.CoroutineDispatcher", + "import kotlinx.coroutines.withContext", + "import io.github.oshai.kotlinlogging.KotlinLogging" + ], + "arg_patterns": {} + }, + { + "label": "agents/examples/simple-rag/src/test/kotlin/eu/corentic/springrag/example/rag/simple", + "method_count": 14, + "algorithm": "CRX", + "grammar": "root ::= \"runTest\"? (\"ChatClientRequestSpec\" | \"mockk\")?+ \"CallResponseSpec\"? (\"String\" | \"any\" | \"call\" | \"every\" | \"prompt\" | \"system\" | \"user\")?+ \"content\"?+", + "mdl_score": 3710, + "imports": [ + "import eu.corentic.springrag.model.VectorChunk", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.slot", + "import kotlinx.coroutines.test.runTest", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import org.springframework.ai.chat.client.ChatClient", + "import org.springframework.ai.chat.client.ChatClient.CallResponseSpec", + "import org.springframework.ai.chat.client.ChatClient.ChatClientRequestSpec", + "import eu.corentic.springrag.agent.rag.RagAgent", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.RetrievalPort", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import io.mockk.verify", + "import kotlinx.coroutines.test.StandardTestDispatcher", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import io.mockk.clearAllMocks", + "import org.junit.jupiter.api.AfterEach", + "import org.junit.jupiter.api.Assertions.assertFalse", + "import tools.jackson.databind.json.JsonMapper", + "import tools.jackson.module.kotlin.KotlinModule" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel", + "method_count": 58, + "imports": [ + "import com.fasterxml.jackson.databind.ObjectMapper", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import com.embabel.agent.api.invocation.AgentInvocation", + "import com.embabel.agent.core.AgentPlatform", + "import com.embabel.agent.core.resultOfType", + "import com.embabel.agent.core.Identities", + "import com.embabel.agent.core.ProcessOptions", + "import com.embabel.agent.core.support.InMemoryBlackboard", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.capability.DescribedAgentCapability", + "import eu.corentic.springrag.agent.capability.TransportExposedAgentCapability", + "import eu.corentic.springrag.agent.rag.RagAgent", + "import eu.corentic.springrag.agent.rag.RagInvocation", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.model.ChatResponse", + "import kotlinx.coroutines.CoroutineDispatcher", + "import kotlinx.coroutines.withContext", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.stereotype.Component", + "import org.springframework.stereotype.Service", + "import kotlin.math.max", + "import eu.corentic.springrag.agent.rag.support.RagDocumentSupport", + "import eu.corentic.springrag.model.Source", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.RetrievalPort", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.ai.chat.memory.ChatMemory", + "import com.embabel.agent.api.annotation.AchievesGoal", + "import com.embabel.agent.api.annotation.Action", + "import com.embabel.agent.api.annotation.Agent", + "import com.embabel.agent.api.annotation.Condition", + "import com.embabel.agent.api.common.ActionContext", + "import com.embabel.agent.domain.io.UserInput", + "import eu.corentic.springrag.agent.summarizer.SummarizeRequest", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseQueryPort", + "import io.micrometer.common.KeyValue", + "import io.micrometer.common.KeyValues", + "import org.springframework.ai.chat.client.observation.ChatClientObservationContext", + "import org.springframework.ai.chat.client.observation.DefaultChatClientObservationConvention", + "import io.micrometer.observation.ObservationRegistry", + "import java.util.function.Supplier", + "import org.springframework.ai.chat.client.ChatClient", + "import org.springframework.ai.chat.model.ChatModel", + "import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor", + "import org.springframework.ai.chat.prompt.ChatOptions", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel/librechat", + "method_count": 13, + "imports": [ + "import com.embabel.agent.api.annotation.AchievesGoal", + "import com.embabel.agent.api.annotation.Action", + "import com.embabel.agent.api.annotation.Agent", + "import com.embabel.agent.api.annotation.Condition", + "import com.embabel.agent.api.common.ActionContext", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.agent.rag.embabel.ConversationMemoryContext", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelJudgeDecision", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelRagDecisionPolicy", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelWorkflowObservationContext", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelWorkflowObservationConvention", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelWorkflowPromptService", + "import eu.corentic.springrag.agent.rag.embabel.JudgeOutcome", + "import eu.corentic.springrag.agent.rag.embabel.RagDecisionState", + "import eu.corentic.springrag.agent.rag.embabel.RetrievedEvidence", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalRequest", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalResult", + "import eu.corentic.springrag.agent.rag.support.RagDocumentSupport", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.RetrievalPort", + "import eu.corentic.springrag.service.port.VectorDocumentPort", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.stereotype.Service", + "import com.embabel.agent.core.AgentPlatform", + "import com.embabel.agent.core.Identities", + "import com.embabel.agent.core.ProcessOptions", + "import com.embabel.agent.core.resultOfType", + "import com.embabel.agent.core.support.InMemoryBlackboard", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalInvoker", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.stereotype.Component" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/agent/rag/embabel", + "method_count": 36, + "algorithm": "CRX", + "grammar": "root ::= \"every\"? \"listKnowledgeBases\"?+ \"RagRequest\"? \"checkKnowledgeBase\"?+ \"assertEquals\"? \"of\"?+ \"request\"? \"knowledgeBaseId\"?", + "mdl_score": 66, + "imports": [ + "import com.embabel.agent.api.invocation.AgentInvocation", + "import com.embabel.agent.core.Agent", + "import com.embabel.agent.core.AgentPlatform", + "import com.embabel.agent.core.AgentProcess", + "import com.embabel.agent.core.ProcessOptions", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.rag.RagInvocation", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.model.ChatResponse", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.mockkObject", + "import io.mockk.slot", + "import io.mockk.unmockkAll", + "import io.mockk.verify", + "import org.junit.jupiter.api.AfterEach", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNull", + "import org.junit.jupiter.api.Test", + "import kotlinx.coroutines.test.StandardTestDispatcher", + "import kotlinx.coroutines.test.runTest", + "import eu.corentic.springrag.model.PageTextElement", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.RetrievalPort", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.springframework.ai.chat.memory.ChatMemory", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseListItem", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseQueryPort", + "import org.springframework.ai.chat.client.ChatClientRequest", + "import org.springframework.ai.chat.client.observation.ChatClientObservationContext", + "import org.springframework.ai.chat.prompt.Prompt", + "import eu.corentic.springrag.testsupport.NoOpCircuitBreakerFactory", + "import io.micrometer.observation.ObservationRegistry", + "import org.springframework.ai.chat.memory.InMemoryChatMemoryRepository", + "import org.springframework.ai.chat.memory.MessageWindowChatMemory", + "import org.springframework.ai.chat.messages.AssistantMessage", + "import org.springframework.ai.chat.messages.MessageType", + "import org.springframework.ai.chat.messages.UserMessage", + "import org.springframework.ai.chat.model.ChatModel", + "import org.springframework.ai.chat.model.ChatResponse", + "import org.springframework.ai.chat.model.Generation", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelJudgeDecision", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelRagDecisionPolicy", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelRagWorkflowAgentProperties", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelWorkflowPromptService", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalRequest", + "import eu.corentic.springrag.service.port.VectorDocumentPort" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/testsupport", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"Any\" | \"Builder\" | \"get\")+", + "mdl_score": 15, + "imports": [ + "import java.util.function.Function", + "import java.util.function.Supplier", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreaker", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import org.springframework.cloud.client.circuitbreaker.ConfigBuilder" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/ports/src/main/kotlin/eu/corentic/springrag/agent/rag", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"defaultCapabilityId\"? \"answer\"? \"request\"? \"AgentExecutionContext\"? \"RagRequest\"? \"executionContext\"? \"let\"?+ \"KnowledgeBaseId\"?", + "mdl_score": 242, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapability", + "import eu.corentic.springrag.agent.capability.AgentCapabilityHandler", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.model.ChatResponse", + "import eu.corentic.springrag.agent.capability.AgentCapabilityInvocationGateway" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/ports/src/test/kotlin/eu/corentic/springrag/agent/rag", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"runTest\"? \"return ChatResponse(answer = \\\"ok\\\", sources = emptyList())\"? \"RecordingRagAgent\"? \"ChatResponse\"? \"RagInvocation\"? \"emptyList\"?+ \"RagRequest\"? \"invoke\"?+ (\"answer\" | \"asKnowledgeBaseId\" | \"assertEquals\" | \"conversationId\" | \"knowledgeBaseId\" | \"lastRequest\" | \"message\")?+ \"executionContext\"? \"agentId\"? \"lastContext\"?", + "mdl_score": 3304, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.model.ChatResponse", + "import kotlinx.coroutines.test.runTest", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/ports/src/test/kotlin/eu/corentic/springrag/model", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"ChatResponse\"? (\"Source\" | \"emptyList\" | \"listOf\")?+ \"toMarkdownSummary\"?+ (\"assertTrue\" | \"contains\")?+", + "mdl_score": 858, + "imports": [ + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/support/src/main/kotlin/eu/corentic/springrag/agent/rag/support", + "method_count": 13, + "algorithm": "CRX", + "grammar": "root ::= (\"String\" | \"metadata\")+", + "mdl_score": 62, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.toDescriptor", + "import eu.corentic.springrag.agent.rag.RagAgent", + "import eu.corentic.springrag.agent.rag.RagAgentRegistry", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.model.Source", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.RetrievalPort", + "import io.github.oshai.kotlinlogging.KotlinLogging" + ], + "arg_patterns": {} + }, + { + "label": "agents/rag/support/src/test/kotlin/eu/corentic/springrag/agent/rag/support", + "method_count": 11, + "algorithm": "CRX", + "grammar": "root ::= \"VectorChunk\"? \"mapOf\"?+ (\"every\" | \"id\")?+ \"capabilityType\"? \"DefaultRagAgentRegistry\"? \"listOf\"?+ \"assertEquals\"?", + "mdl_score": 100, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.rag.RagAgent", + "import eu.corentic.springrag.agent.rag.RagAgentInvocationAuthorizer", + "import eu.corentic.springrag.agent.rag.RagInvocation", + "import eu.corentic.springrag.agent.rag.RagAgentRegistry", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.model.ChatResponse", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.verify", + "import kotlinx.coroutines.test.runTest", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.DescribedAgentCapability", + "import eu.corentic.springrag.agent.capability.TransportExposedAgentCapability", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import org.junit.jupiter.api.Assertions.assertDoesNotThrow", + "import eu.corentic.springrag.model.PageTextElement", + "import eu.corentic.springrag.model.SourceImage", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.RetrievalPort", + "import kotlin.test.Test", + "import kotlin.test.assertEquals", + "import kotlin.test.assertTrue" + ], + "arg_patterns": {} + }, + { + "label": "agents/summarizer/embabel/src/main/kotlin/eu/corentic/springrag/agent/summarizer/embabel", + "method_count": 13, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.toDescriptor", + "import eu.corentic.springrag.agent.summarizer.SummarizerAgent", + "import eu.corentic.springrag.agent.summarizer.SummarizerAgentRegistry", + "import org.springframework.stereotype.Component", + "import com.embabel.agent.api.invocation.AgentInvocation", + "import com.embabel.agent.core.AgentPlatform", + "import com.embabel.agent.core.Identities", + "import com.embabel.agent.core.ProcessOptions", + "import eu.corentic.springrag.agent.capability.DescribedAgentCapability", + "import eu.corentic.springrag.agent.capability.TransportExposedAgentCapability", + "import eu.corentic.springrag.agent.summarizer.SummarizeRequest", + "import eu.corentic.springrag.agent.summarizer.SummaryResponse", + "import kotlinx.coroutines.CoroutineDispatcher", + "import kotlinx.coroutines.Dispatchers", + "import kotlinx.coroutines.withContext", + "import org.springframework.stereotype.Service", + "import com.embabel.agent.api.annotation.AchievesGoal", + "import com.embabel.agent.api.annotation.Action", + "import com.embabel.agent.api.annotation.Agent", + "import com.embabel.agent.api.common.ActionContext", + "import com.embabel.agent.domain.io.UserInput", + "import com.embabel.common.ai.model.LlmOptions", + "import eu.corentic.springrag.agent.tooling.embabel.DEFAULT_TOOL_PROFILE", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationAction", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationRequest", + "import org.springframework.beans.factory.annotation.Value", + "import eu.corentic.springrag.agent.summarizer.SummarizerInvocationAuthorizer", + "import io.github.oshai.kotlinlogging.KotlinLogging" + ], + "arg_patterns": {} + }, + { + "label": "agents/summarizer/embabel/src/test/kotlin/eu/corentic/springrag/agent/summarizer/embabel", + "method_count": 14, + "imports": [ + "import com.embabel.agent.api.invocation.AgentInvocation", + "import com.embabel.agent.core.AgentPlatform", + "import com.embabel.agent.core.ProcessOptions", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.summarizer.SummarizeRequest", + "import eu.corentic.springrag.agent.summarizer.SummaryResponse", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.mockkObject", + "import io.mockk.slot", + "import io.mockk.unmockkAll", + "import io.mockk.verify", + "import org.junit.jupiter.api.AfterEach", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNull", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.summarizer.SummarizerAgent", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import eu.corentic.springrag.agent.summarizer.SummarizerInvocationAuthorizer", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import kotlinx.coroutines.test.runTest", + "import kotlinx.coroutines.test.StandardTestDispatcher", + "import com.embabel.agent.api.common.ActionContext", + "import com.embabel.agent.api.common.Ai", + "import com.embabel.agent.api.common.PromptRunner", + "import com.embabel.common.ai.model.LlmOptions", + "import org.junit.jupiter.api.Assertions.assertDoesNotThrow" + ], + "arg_patterns": {} + }, + { + "label": "agents/tooling/agent/src/main/kotlin/eu/corentic/springrag/agent/tooling/agent", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= (\"buildString\" | \"forEachIndexed\" | \"if\" | \"ifBlank\" | \"isEmpty\" | \"response\" | \"return buildString {\n result.toolCalls.forEachIndexed { index, call ->\n if (index > 0) append(\\\"\\\\n\\\\n\\\")\n append(\\\"Tool: \\\").append(call.tool).append(\\\"\\\\n\\\")\n append(\\\"Input: \\\").append(call.input).append(\\\"\\\\n\\\")\n append(\\\"Output:\\\\n\\\").append(call.output)\n }\n }\" | \"return result.response.ifBlank { \\\"No tool results were captured.\\\" }\" | \"toolCalls\")?+ \"ToolingRequest\"? \"goal\"? (\"append\" | \"input\" | \"tool\")?+ \"content\"? \"renderToolResults\"? \"output\"? \"trimIndent\"?+ \"return toolInvocationAction.invoke(\n ToolInvocationRequest(\n prompt = prompt,\n toolProfile = request.toolProfile\n ),\n context\n )\"? \"promptRunner\"?+ \"invoke\"?+ \"LlmOptions\"? \"ToolInvocationRequest\"? \"emptySet\"?+ \"toolProfile\"? \"emptyList\"?+ \"generateText\"?+ \"trim\"?+ \"return ToolingResponse(answer = answer)\"? \"ToolingResponse\"?", + "mdl_score": 0, + "imports": [ + "import com.embabel.agent.api.annotation.AchievesGoal", + "import com.embabel.agent.api.annotation.Action", + "import com.embabel.agent.api.annotation.Agent", + "import com.embabel.agent.api.common.ActionContext", + "import com.embabel.agent.domain.io.UserInput", + "import com.embabel.common.ai.model.LlmOptions", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationAction", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationRequest", + "import eu.corentic.springrag.agent.tooling.embabel.ToolInvocationResult", + "import org.springframework.stereotype.Service" + ], + "arg_patterns": {} + }, + { + "label": "agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel", + "method_count": 12, + "imports": [ + "import com.fasterxml.jackson.databind.ObjectMapper", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import com.embabel.agent.api.tool.ToolObject", + "import com.embabel.agent.api.annotation.Action", + "import com.embabel.agent.api.common.ActionContext", + "import com.embabel.agent.api.common.ContextualPromptElement", + "import com.embabel.common.ai.model.LlmOptions", + "import com.embabel.common.ai.prompt.PromptContributor", + "import com.embabel.agent.prompt.element.FocusedToolCallControl", + "import com.embabel.agent.prompt.element.ToolCallControl", + "import eu.corentic.springrag.agent.tooling.embabel.recording.ToolCallRecord", + "import eu.corentic.springrag.agent.tooling.embabel.recording.ToolInvocationRecorder", + "import org.springframework.stereotype.Service", + "import org.springframework.boot.context.properties.ConfigurationProperties", + "import org.springaicommunity.agent.tools.FileSystemTools", + "import org.springaicommunity.agent.tools.GrepTool", + "import org.springaicommunity.agent.tools.GlobTool", + "import org.springaicommunity.agent.tools.ShellTools", + "import org.springaicommunity.agent.tools.SmartWebFetchTool", + "import org.springframework.ai.chat.client.ChatClient", + "import org.springframework.boot.context.properties.EnableConfigurationProperties" + ], + "arg_patterns": {} + }, + { + "label": "agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel/recording", + "method_count": 11, + "imports": [ + "import com.embabel.agent.api.event.AgentProcessEvent", + "import com.embabel.agent.api.event.AgenticEventListener", + "import com.embabel.agent.api.event.ToolCallResponseEvent", + "import com.fasterxml.jackson.core.JsonProcessingException", + "import com.fasterxml.jackson.databind.ObjectMapper", + "import org.slf4j.LoggerFactory", + "import java.util.concurrent.ConcurrentHashMap", + "import com.embabel.agent.api.common.PlatformServices", + "import com.embabel.agent.api.event.MulticastAgenticEventListener", + "import org.springframework.beans.factory.config.BeanPostProcessor", + "import org.springframework.boot.context.properties.EnableConfigurationProperties", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration" + ], + "arg_patterns": {} + }, + { + "label": "agents/tooling/embabel/src/test/kotlin/eu/corentic/springrag/agent/tooling/embabel", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"ToolInvocationPolicyProperties\"? (\"AgentProcess\" | \"Any\" | \"PolicyAwareToolInvocationToolProvider\" | \"StaticToolInvocationToolProvider\" | \"ToolInvocationAction\" | \"ToolInvocationRequest\" | \"ToolObject\" | \"ToolProfilePolicy\" | \"addObject\" | \"agent\" | \"agentProcess\" | \"any\" | \"assertEquals\" | \"assertFalse\" | \"assertTrue\" | \"blackboard\" | \"capture\" | \"com\" | \"core\" | \"embabel\" | \"every\" | \"filter\" | \"generateText\" | \"get\" | \"id\" | \"invoke\" | \"listOf\" | \"mapOf\" | \"mockk\" | \"processContext\" | \"promptRunner\" | \"response\" | \"set\" | \"setOf\" | \"single\" | \"slot\" | \"toolObjectsFor\" | \"toolProfile\" | \"verify\" | \"withToolChainingFromAny\")?+ (\"captured\" | \"emptyList\")?+", + "mdl_score": 16597680, + "imports": [ + "import com.embabel.agent.api.tool.ToolObject", + "import kotlin.test.assertFalse", + "import kotlin.test.assertTrue", + "import kotlin.test.assertEquals", + "import org.junit.jupiter.api.Test", + "import com.embabel.agent.api.common.ActionContext", + "import com.embabel.agent.api.common.PromptRunner", + "import com.embabel.agent.core.Blackboard", + "import com.embabel.agent.core.ProcessContext", + "import io.mockk.Runs", + "import io.mockk.every", + "import io.mockk.just", + "import io.mockk.mockk", + "import io.mockk.slot", + "import io.mockk.verify" + ], + "arg_patterns": {} + }, + { + "label": "agents/wikipedia/adapters/src/main/kotlin/eu/corentic/springrag/agent/wikipedia", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"values\"? \"debug\"?+ \"when\"? \"sortedBy\"?+ \"topic\"? \"isNullOrBlank\"?+ \"id\"? \"else\"? \"map\"?+ \"error\"?+ \"toDescriptor\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.toDescriptor", + "import org.springframework.stereotype.Component", + "import io.github.oshai.kotlinlogging.KotlinLogging" + ], + "arg_patterns": {} + }, + { + "label": "agents/wikipedia/adapters/src/test/kotlin/eu/corentic/springrag/agent/wikipedia", + "method_count": 8, + "algorithm": "CRX", + "grammar": "root ::= (\"every\" | \"id\")?+ \"defaultCapabilityId\"?+ \"capabilityType\"? \"DefaultWikipediaLookupAgentRegistry\"? (\"assertEquals\" | \"listOf\")?+ \"AgentCapabilityDescriptor\"? \"capabilityDescriptors\"?+", + "mdl_score": 32, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.DescribedAgentCapability", + "import eu.corentic.springrag.agent.capability.TransportExposedAgentCapability", + "import io.mockk.every", + "import io.mockk.mockk", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import org.junit.jupiter.api.Test", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import io.mockk.verify", + "import kotlinx.coroutines.test.runTest", + "import org.junit.jupiter.api.Assertions.assertDoesNotThrow" + ], + "arg_patterns": {} + }, + { + "label": "agents/wikipedia/static/src/main/kotlin/eu/corentic/springrag/agent/wikipedia", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"WikipediaLookupResponse\" | \"contains\" | \"firstOrNull\" | \"normalize\" | \"return keywordMatch ?: WikipediaLookupResponse(\n topic = request.topic,\n summary = \\\"No static encyclopedia entry was found for \\\\\\\"${request.topic}\\\\\\\". This static capability can later be replaced with a real Wikipedia or MCP-backed lookup agent.\\\",\n wikipediaUrl = null,\n found = false\n )\" | \"topic\")?+ \"trim\"?+ \"lowercase\"?+ \"replace\"?+ \"Regex\"?", + "mdl_score": 120, + "imports": [ + "import eu.corentic.springrag.agent.capability.DescribedAgentCapability", + "import eu.corentic.springrag.agent.capability.TransportExposedAgentCapability", + "import org.springframework.stereotype.Component" + ], + "arg_patterns": {} + }, + { + "label": "agents/wikipedia/static/src/test/kotlin/eu/corentic/springrag/agent/wikipedia", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"runTest\"? \"invoke\"?+ \"WikipediaLookupRequest\"? \"assertFalse\"? (\"assertEquals\" | \"assertTrue\" | \"contains\" | \"found\" | \"summary\" | \"topic\")?+ \"wikipediaUrl\"?", + "mdl_score": 8136, + "imports": [ + "import kotlinx.coroutines.test.runTest", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertFalse", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test" + ], + "arg_patterns": {} + }, + { + "label": "app/src", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= (\"assertTrue\" | \"isRunning\" | \"neo4jContainer\" | \"ollamaContainer\" | \"qdrantContainer\")?+ \"getenv\"?+ \"YamlPropertiesFactoryBean\"? \"activeProfiles\"? \"assertNotNull\"? \"return WebTestClient.bindToServer().baseUrl(baseUrl).build()\"? \"setResources\"?+ \"joinToString\"?+ \"bindToServer\"?+ \"ClassPathResource\"? \"ifBlank\"?+ \"baseUrl\"?+ \"`object`\"? (\"ConfigurableEnvironment\" | \"EnumerablePropertySource\" | \"String\" | \"add\" | \"first\" | \"forEach\" | \"getProperty\" | \"if\" | \"info\" | \"linkedSetOf\" | \"map\" | \"propertyNames\" | \"propertySources\" | \"return\" | \"return if (SECRET_KEY_PATTERNS.any { it.containsMatchIn(key) }) \\\"******\\\" else value\" | \"return value\" | \"size\" | \"sortedBy\" | \"warn\")?+ \"build\"?+ \"emptyMap\"?+ \"any\"?+ \"maskValue\"? (\"assertEquals\" | \"replace\" | \"toString\")?+ \"containsMatchIn\"?+ \"else\"?", + "mdl_score": 0, + "imports": [ + "import io.cucumber.spring.CucumberContextConfiguration", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.boot.test.context.TestConfiguration", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Import", + "import org.springframework.test.context.ActiveProfiles", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.boot.ApplicationArguments", + "import org.springframework.boot.ApplicationRunner", + "import org.springframework.core.env.ConfigurableEnvironment", + "import org.springframework.core.env.Environment", + "import org.springframework.core.env.EnumerablePropertySource", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.config.BaseSystemTest", + "import eu.corentic.springrag.testcontainers.SharedContainers", + "import kotlin.test.assertNotNull", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient", + "import kotlin.test.assertEquals", + "import org.springframework.beans.factory.config.YamlPropertiesFactoryBean", + "import org.springframework.core.io.ClassPathResource" + ], + "arg_patterns": {} + }, + { + "label": "app/src/e2eTest/kotlin/eu/corentic/springrag/e2e/cucumber/steps", + "method_count": 17, + "algorithm": "CRX", + "grammar": "root ::= \"exchange\"?+ \"post\"?+ \"expectStatus\"?+ \"uri\"?+ \"contentType\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.e2e.cucumber.config.ScenarioContext", + "import io.cucumber.java.en.Given", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.http.MediaType", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import java.util.UUID", + "import io.cucumber.java.en.Then", + "import io.cucumber.java.en.When", + "import io.cucumber.java.Before", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import org.awaitility.Awaitility.await", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.springframework.http.client.MultipartBodyBuilder", + "import org.springframework.web.reactive.function.BodyInserters", + "import java.io.File", + "import java.time.Duration" + ], + "arg_patterns": {} + }, + { + "label": "app/src/integrationTest/kotlin/eu/corentic/springrag/config", + "method_count": 15, + "imports": [ + "import org.springframework.batch.core.repository.JobRepository", + "import org.springframework.batch.test.JobRepositoryTestUtils", + "import org.springframework.boot.test.context.TestConfiguration", + "import org.springframework.context.annotation.Bean", + "import ai.docling.serve.api.DoclingServeApi", + "import eu.corentic.springrag.agent.rag.embabel.EmbabelRagResponseInvoker", + "import eu.corentic.springrag.agent.summarizer.embabel.EmbabelSummarizerResponseInvoker", + "import com.embabel.agent.core.AgentPlatform", + "import io.mockk.mockk", + "import io.qdrant.client.QdrantClient", + "import org.neo4j.driver.Driver", + "import org.neo4j.driver.Session", + "import org.springframework.ai.chat.model.ChatModel", + "import org.springframework.ai.chat.prompt.ChatOptions", + "import org.springframework.ai.embedding.EmbeddingModel", + "import org.springframework.ai.vectorstore.VectorStore", + "import org.springframework.context.annotation.Primary", + "import org.springframework.security.authentication.ReactiveAuthenticationManager", + "import org.springframework.batch.core.launch.JobOperator" + ], + "arg_patterns": {} + }, + { + "label": "app/src/integrationTest/kotlin/eu/corentic/springrag/controller", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"ByteArray\"? (\"Ok\" | \"ParsedJwt\" | \"SimpleGrantedAuthority\" | \"any\" | \"every\" | \"extractAuthorities\" | \"extractUsername\" | \"listOf\" | \"parseToken\" | \"validateToken\")?+ \"get\"?+ \"generateToken\"?+ \"InputStreamResource\"?+ \"bindToServer\"?+ \"User\"? \"ByteArrayInputStream\"? \"baseUrl\"?+ \"ROLE_ADMIN\"? \"fun\"? \"mutate\"?+ \"Long\"?+ \"defaultHeader\"?+ \"MultipartBodyBuilder\"? \"part\"?+ (\"header\" | \"post\" | \"uri\")?+ \"AUTHORIZATION\"? \"contentType\"?+ \"MULTIPART_FORM_DATA\"? \"body\"?+ \"fromMultipartData\"?+ \"build\"?+ \"exchange\"?+ \"expectStatus\"?+ \"isNotFound\"? \"isOk\"? \"expectBody\"?+ \"jsonPath\"?+ \"isEqualTo\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.config.IntegrationTestConfig", + "import eu.corentic.springrag.security.model.Role", + "import eu.corentic.springrag.security.model.User", + "import eu.corentic.springrag.security.service.JwtService", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.BeforeEach", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient", + "import org.springframework.context.annotation.Import", + "import org.springframework.http.HttpHeaders", + "import org.springframework.test.context.ActiveProfiles", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import com.ninjasquad.springmockk.MockkBean", + "import eu.corentic.springrag.common.Outcome", + "import eu.corentic.springrag.service.job.JobService", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseService", + "import io.mockk.every", + "import java.io.ByteArrayInputStream", + "import org.springframework.core.io.InputStreamResource", + "import org.springframework.http.HttpStatus", + "import org.springframework.http.MediaType", + "import org.springframework.http.client.MultipartBodyBuilder", + "import org.springframework.security.core.authority.SimpleGrantedAuthority", + "import org.springframework.web.reactive.function.BodyInserters", + "import org.springframework.boot.test.web.server.LocalServerPort" + ], + "arg_patterns": {} + }, + { + "label": "app/src/integrationTest/kotlin/eu/corentic/springrag/service", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"Instant\" | \"JobId\" | \"KnowledgeBaseId\" | \"common\" | \"corentic\" | \"ids\" | \"of\" | \"parse\" | \"randomUUID\" | \"springrag\" | \"time\")?+ \"stream\"?+ \"model\"? (\"Assertions\" | \"anyMatch\" | \"api\" | \"assertTrue\" | \"expected\" | \"java\" | \"junit\" | \"jupiter\")?+ \"KnowledgeBase\"?+ \"simpleName\"? (\"every\" | \"existsById\")?+ \"findById\"?+ \"existsByJobIdAndKnowledgeBaseId\"?+ \"deleteKnowledgeBase\"?+ \"deleteDocument\"?+ \"KnowledgeBaseDeletionRequested\"? \"DocumentDeletionRequested\"? \"assertApplicationEventPublished\"?", + "mdl_score": 0, + "imports": [ + "import com.ninjasquad.springmockk.MockkBean", + "import eu.corentic.springrag.config.IntegrationTestConfig", + "import eu.corentic.springrag.model.event.DocumentDeletionRequested", + "import eu.corentic.springrag.model.event.KnowledgeBaseDeletionRequested", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseApplicationService", + "import eu.corentic.springrag.service.port.KnowledgeBaseDocumentPort", + "import eu.corentic.springrag.service.port.KnowledgeBasePort", + "import io.mockk.every", + "import java.util.UUID", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.context.annotation.Import", + "import org.springframework.test.context.ActiveProfiles", + "import org.springframework.test.context.event.ApplicationEvents", + "import org.springframework.test.context.event.RecordApplicationEvents" + ], + "arg_patterns": {} + }, + { + "label": "app/src/systemTest/kotlin/eu/corentic/springrag/config", + "method_count": 14, + "imports": [ + "import eu.corentic.springrag.testcontainers.OllamaModelSupport", + "import eu.corentic.springrag.testcontainers.QdrantTestSupport", + "import eu.corentic.springrag.testcontainers.QdrantTestSupport.recreateTestCollection", + "import eu.corentic.springrag.testcontainers.SharedContainers", + "import eu.corentic.springrag.testcontainers.SharedContainers.ContainerType", + "import io.qdrant.client.QdrantClient", + "import java.time.Duration", + "import java.time.Instant", + "import java.util.UUID", + "import org.junit.jupiter.api.Assumptions", + "import org.junit.jupiter.api.BeforeAll", + "import org.junit.jupiter.api.BeforeEach", + "import org.neo4j.driver.Driver", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient", + "import org.springframework.jdbc.core.JdbcTemplate", + "import org.springframework.security.crypto.password.PasswordEncoder", + "import org.springframework.test.context.ActiveProfiles", + "import org.springframework.test.context.DynamicPropertyRegistry", + "import org.springframework.test.context.DynamicPropertySource", + "import org.springframework.test.context.TestPropertySource", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import org.testcontainers.junit.jupiter.Testcontainers", + "import java.sql.Timestamp", + "import org.springframework.batch.core.repository.JobRepository", + "import org.springframework.batch.test.JobRepositoryTestUtils", + "import org.springframework.boot.test.context.TestConfiguration", + "import org.springframework.context.annotation.Bean", + "import org.mockito.Mockito", + "import org.springframework.context.annotation.Primary" + ], + "arg_patterns": {} + }, + { + "label": "app/src/systemTest/kotlin/eu/corentic/springrag/system", + "method_count": 46, + "imports": [ + "import eu.corentic.springrag.config.BaseSystemTest", + "import eu.corentic.springrag.controller.SessionChatRequest", + "import eu.corentic.springrag.model.ChatResponse", + "import java.time.Duration", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.springframework.test.web.reactive.server.returnResult", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.repository.VectorRepository", + "import eu.corentic.springrag.repository.graph.DocumentJobNodeRepository", + "import eu.corentic.springrag.service.job.JobStatus", + "import eu.corentic.springrag.service.job.JobStatusType", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import java.io.File", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import java.nio.file.StandardCopyOption", + "import kotlin.io.path.createDirectory", + "import org.awaitility.Awaitility.await", + "import org.junit.jupiter.api.Assertions.assertNotEquals", + "import org.junit.jupiter.api.io.TempDir", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.core.io.ClassPathResource", + "import org.springframework.http.MediaType", + "import org.springframework.http.client.MultipartBodyBuilder", + "import org.springframework.web.reactive.function.BodyInserters", + "import io.modelcontextprotocol.client.McpClient", + "import io.modelcontextprotocol.client.McpSyncClient", + "import io.modelcontextprotocol.client.transport.WebClientStreamableHttpTransport", + "import io.modelcontextprotocol.spec.McpSchema", + "import org.springframework.boot.test.web.server.LocalServerPort", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import org.springframework.web.reactive.function.client.WebClient", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotEquals", + "import kotlin.test.assertTrue", + "import org.neo4j.driver.Values", + "import eu.corentic.springrag.service.job.JobService", + "import kotlinx.coroutines.runBlocking", + "import org.junit.jupiter.api.assertThrows", + "import java.util.*", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.testcontainers.QdrantTestSupport", + "import java.util.stream.Stream", + "import org.awaitility.core.ConditionTimeoutException", + "import org.junit.jupiter.api.Assertions.*", + "import org.junit.jupiter.params.ParameterizedTest", + "import org.junit.jupiter.params.provider.Arguments", + "import org.junit.jupiter.params.provider.MethodSource" + ], + "arg_patterns": {} + }, + { + "label": "app/src/test/kotlin/eu/corentic/springrag/architecture", + "method_count": 87, + "imports": [ + "import java.nio.file.Files", + "import java.nio.file.Path", + "import kotlin.io.path.exists", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.fail", + "import com.lemonappdev.konsist.api.Konsist", + "import com.lemonappdev.konsist.api.ext.list.withAnnotationOf", + "import com.lemonappdev.konsist.api.verify.assertTrue", + "import org.springframework.stereotype.Service", + "import java.io.IOException", + "import java.nio.file.FileVisitResult", + "import java.nio.file.Paths", + "import java.nio.file.SimpleFileVisitor", + "import java.nio.file.attribute.BasicFileAttributes" + ], + "arg_patterns": {} + }, + { + "label": "app/src/test/kotlin/eu/corentic/springrag/config", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"YamlPropertiesFactoryBean\"? \"loadYaml\"? \"setResources\"?+ \"assertFalse\"? \"ClassPathResource\"? (\"assertEquals\" | \"assertTrue\" | \"containsKey\")?+ \"return factory.`object` ?: emptyMap()\"? \"`object`\"? \"emptyMap\"?+", + "mdl_score": 480, + "imports": [ + "import kotlin.test.assertEquals", + "import kotlin.test.assertFalse", + "import kotlin.test.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.springframework.beans.factory.config.YamlPropertiesFactoryBean", + "import org.springframework.core.io.ClassPathResource" + ], + "arg_patterns": {} + }, + { + "label": "buildSrc/src/main/kotlin", + "method_count": 8, + "algorithm": "CRX", + "grammar": "root ::= \"getByType\"+ \"SourceSetContainer\"?", + "mdl_score": 5, + "imports": [ + "import org.gradle.api.Project", + "import org.gradle.api.artifacts.VersionCatalogsExtension", + "import org.gradle.api.file.SourceDirectorySet", + "import org.gradle.api.plugins.JavaPluginExtension", + "import org.gradle.api.tasks.SourceSet", + "import org.gradle.api.tasks.SourceSetContainer", + "import org.gradle.api.tasks.TaskProvider", + "import org.gradle.api.tasks.testing.Test", + "import org.gradle.jvm.toolchain.JavaLanguageVersion", + "import org.gradle.kotlin.dsl.get", + "import org.gradle.kotlin.dsl.getByType", + "import org.gradle.kotlin.dsl.named", + "import org.gradle.kotlin.dsl.register", + "import org.gradle.kotlin.dsl.withType" + ], + "arg_patterns": {} + }, + { + "label": "buildSrc/src/test/kotlin", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= (\"build\" | \"builder\" | \"withName\" | \"withParent\")?+ \"withType\"?+ \"configureStandardRepositories\"?+ \"pluginManager\"? \"MavenArtifactRepository\"? \"mavenRepositoryUrls\"?+ \"apply\"?+ \"extensions\"? \"getByType\"?+ \"SourceSetContainer\"? \"java\"? \"create\"?+ \"registerJvmTestTask\"?+ (\"get\" | \"named\" | \"register\" | \"registerStandardAggregateVerificationTasks\" | \"tasks\")?+ (\"URI\" | \"assertEquals\" | \"assertFalse\" | \"assertNotNull\" | \"assertTrue\" | \"classesDirs\" | \"classpath\" | \"contains\" | \"description\" | \"files\" | \"getDependencies\" | \"group\" | \"map\" | \"output\" | \"path\" | \"runtimeClasspath\" | \"setOf\" | \"size\" | \"taskDependencies\" | \"testClassesDirs\" | \"toSet\" | \"url\")?+ \"isEmpty\"?+ \"filter\"? \"isFailOnNoMatchingTests\"?", + "mdl_score": 0, + "imports": [ + "import java.net.URI", + "import kotlin.test.assertEquals", + "import kotlin.test.assertFalse", + "import kotlin.test.assertNotNull", + "import kotlin.test.assertTrue", + "import org.gradle.api.artifacts.repositories.MavenArtifactRepository", + "import org.gradle.api.tasks.SourceSetContainer", + "import org.gradle.testfixtures.ProjectBuilder", + "import org.junit.jupiter.api.Test" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/agent-mcp-server/src/main/kotlin/eu/corentic/springrag/mcp", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"mono\"? \"listCapabilities\"?+ \"filter\"?+ \"AgentCapabilityDescriptor\"? (\"KnowledgeBaseId\" | \"RagInvocation\" | \"RagRequest\" | \"WikipediaLookupRequest\" | \"addTextContent\" | \"builder\" | \"capabilityType\" | \"description\" | \"displayName\" | \"else\" | \"id\" | \"if\" | \"invoke\" | \"isEmpty\" | \"isNullOrBlank\" | \"joinToString\" | \"let\" | \"mapOf\" | \"mcp\" | \"structuredContent\" | \"summary\" | \"toMarkdownSummary\" | \"topic\" | \"wikipediaUrl\")?+ \"found\"? \"build\"?+", + "mdl_score": 1512, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDirectory", + "import eu.corentic.springrag.agent.capability.isExposedOverMcp", + "import io.modelcontextprotocol.spec.McpSchema.CallToolResult", + "import kotlinx.coroutines.reactor.mono", + "import org.springaicommunity.mcp.annotation.McpTool", + "import org.springframework.stereotype.Component", + "import reactor.core.publisher.Mono", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.rag.RagAgentInvocationGateway", + "import eu.corentic.springrag.agent.rag.RagInvocation", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.model.toMarkdownSummary", + "import org.springaicommunity.mcp.annotation.McpToolParam", + "import eu.corentic.springrag.agent.wikipedia.WikipediaLookupInvocationGateway", + "import eu.corentic.springrag.agent.wikipedia.WikipediaLookupRequest" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/agent-mcp-server/src/test/kotlin/eu/corentic/springrag/mcp", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"AgentCapabilityDescriptor\"?+ \"ChatResponse\"? \"WikipediaLookupResponse\"? \"every\"? (\"Source\" | \"listCapabilities\" | \"listOf\")?+ \"coEvery\"? \"invoke\"?+ \"any\"? (\"ragAnswer\" | \"wikipediaLookup\")?+ \"block\"?+ \"content\"?+ \"first\"?+ \"TextContent\"? (\"assertTrue\" | \"contains\" | \"text\")?+ \"@\"? \"Suppress\"?+ (\"Any\" | \"List\" | \"Map\" | \"String\" | \"assertEquals\" | \"structuredContent\")?+ \"size\"?", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDirectory", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.modelcontextprotocol.spec.McpSchema.TextContent", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.agent.rag.RagAgentInvocationGateway", + "import eu.corentic.springrag.model.ChatResponse", + "import eu.corentic.springrag.model.Source", + "import io.mockk.coEvery", + "import eu.corentic.springrag.agent.wikipedia.WikipediaLookupInvocationGateway", + "import eu.corentic.springrag.agent.wikipedia.WikipediaLookupResponse" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/config", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"defer\"?+ \"addMapping\"?+ \"allowedOriginPatterns\"?+ \"split\"?+ \"map\"?+ \"trim\"?+ (\"contains\" | \"doFinally\" | \"else\" | \"filter\" | \"if\" | \"method\" | \"name\" | \"nanoTime\" | \"path\" | \"pathWithinApplication\" | \"put\" | \"request\" | \"response\" | \"return chain.filter(exchange)\" | \"return chain.filter(exchange)\n .doFinally {\n val tookMs = (System.nanoTime() - startedAt) / 1_000_000\n val status = exchange.response.statusCode?.value() ?: 0\n logger.info { \\\"LIBRECHAT $method $path -> $status (${tookMs}ms)\\\" }\n }\" | \"startsWith\" | \"statusCode\" | \"uri\" | \"value\" | \"when\")?+ \"isNotEmpty\"?+ (\"info\" | \"remove\")?+ \"toTypedArray\"?+ \"allowedMethods\"?+ \"allowedHeaders\"?+ \"allowCredentials\"?+", + "mdl_score": 0, + "imports": [ + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.context.annotation.Configuration", + "import org.springframework.web.reactive.config.CorsRegistry", + "import org.springframework.web.reactive.config.WebFluxConfigurer", + "import org.slf4j.MDC", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty", + "import org.springframework.web.server.ServerWebExchange", + "import org.springframework.web.server.WebFilter", + "import org.springframework.web.server.WebFilterChain", + "import reactor.core.publisher.Mono", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.core.Ordered", + "import org.springframework.core.annotation.Order", + "import org.springframework.stereotype.Component" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller", + "method_count": 58, + "algorithm": "CRX", + "grammar": "root ::= \"warn\"?+ \"message\"? \"status\"?+", + "mdl_score": 14, + "imports": [ + "import eu.corentic.springrag.common.ids.BatchId", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.service.job.BatchOwnershipService", + "import eu.corentic.springrag.service.job.JobService", + "import eu.corentic.springrag.service.job.JobStatus", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseApplicationService", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseNotFoundException", + "import jakarta.validation.constraints.NotBlank", + "import jakarta.validation.constraints.Pattern", + "import org.springframework.http.ResponseEntity", + "import org.springframework.security.access.prepost.PreAuthorize", + "import org.springframework.security.core.Authentication", + "import org.springframework.validation.annotation.Validated", + "import org.springframework.web.bind.annotation.*", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.model.ChatResponse", + "import eu.corentic.springrag.service.chat.ChatService", + "import jakarta.validation.Valid", + "import org.springframework.web.bind.annotation.GetMapping", + "import org.springframework.web.bind.annotation.PostMapping", + "import org.springframework.web.bind.annotation.RequestBody", + "import org.springframework.web.bind.annotation.RequestMapping", + "import org.springframework.web.bind.annotation.RestController", + "import kotlinx.coroutines.TimeoutCancellationException", + "import kotlinx.coroutines.withTimeout", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.beans.factory.annotation.Value", + "import java.util.UUID", + "import eu.corentic.springrag.controller.dto.ErrorResponse", + "import eu.corentic.springrag.security.service.PasswordPolicyViolationException", + "import eu.corentic.springrag.security.service.UserAlreadyExistsException", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseAlreadyExistsException", + "import eu.corentic.springrag.service.knowledgebase.DocumentNotFoundInKnowledgeBaseException", + "import eu.corentic.springrag.service.knowledgebase.InvalidKnowledgeBaseNameException", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseSizeLimitExceededException", + "import eu.corentic.springrag.service.job.JobAlreadyCompleteException", + "import eu.corentic.springrag.service.job.JobAlreadyRunningException", + "import eu.corentic.springrag.service.job.JobExecutionNotFoundException", + "import eu.corentic.springrag.service.job.BatchOwnershipException", + "import eu.corentic.springrag.service.job.BatchNotFoundException", + "import eu.corentic.springrag.service.job.BatchOwnerRequiredException", + "import eu.corentic.springrag.service.job.JobInputValidationException", + "import jakarta.validation.ConstraintViolationException", + "import org.springframework.http.HttpStatus", + "import org.springframework.http.converter.HttpMessageNotReadableException", + "import org.springframework.core.io.buffer.DataBufferLimitException", + "import org.springframework.web.bind.MethodArgumentNotValidException", + "import org.springframework.web.bind.annotation.ExceptionHandler", + "import org.springframework.web.bind.annotation.RestControllerAdvice", + "import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException", + "import org.springframework.web.server.ServerWebInputException", + "import org.springframework.web.server.MissingRequestValueException", + "import org.springframework.web.bind.support.WebExchangeBindException", + "import eu.corentic.springrag.service.knowledgebase.*", + "import io.swagger.v3.oas.annotations.Operation", + "import io.swagger.v3.oas.annotations.tags.Tag", + "import io.swagger.v3.oas.annotations.Parameter", + "import java.security.Principal", + "import kotlinx.coroutines.reactor.awaitSingle", + "import org.springframework.http.codec.multipart.FilePart", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.service.job.StagedUploadCleanupService", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import kotlinx.coroutines.reactor.awaitSingleOrNull", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import org.springframework.core.io.buffer.DataBufferUtils", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.security.service.JwtService", + "import eu.corentic.springrag.security.service.UserService", + "import org.springframework.security.crypto.password.PasswordEncoder" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/librechat", + "method_count": 29, + "imports": [ + "import com.fasterxml.jackson.annotation.JsonProperty", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import eu.corentic.springrag.model.GraphTableElement", + "import eu.corentic.springrag.model.GraphTextElement", + "import eu.corentic.springrag.service.document.DocumentIdentity", + "import eu.corentic.springrag.service.port.DocumentIdPort", + "import eu.corentic.springrag.service.port.DocumentImagePort", + "import eu.corentic.springrag.service.port.DocumentParserPort", + "import eu.corentic.springrag.service.port.DocumentParsingRequest", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import eu.corentic.springrag.service.port.VectorDocumentDeletionPort", + "import eu.corentic.springrag.service.port.VectorDocumentPort", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalInvoker", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalRequest", + "import eu.corentic.springrag.service.job.JobService", + "import eu.corentic.springrag.service.job.JobStatusType", + "import eu.corentic.springrag.service.port.AgentKnowledgeBasePort", + "import jakarta.validation.Valid", + "import jakarta.validation.constraints.NotBlank", + "import jakarta.validation.constraints.NotEmpty", + "import kotlinx.coroutines.CoroutineDispatcher", + "import kotlinx.coroutines.withContext", + "import kotlinx.coroutines.reactor.awaitSingleOrNull", + "import org.springframework.http.MediaType", + "import org.springframework.http.ResponseEntity", + "import org.springframework.http.codec.multipart.FilePart", + "import org.springframework.web.bind.annotation.*", + "import org.springframework.core.io.buffer.DataBufferUtils", + "import kotlin.math.max", + "import kotlin.math.min", + "import eu.corentic.springrag.common.ids.BatchId", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.controller.InvalidUploadRequestException", + "import eu.corentic.springrag.service.job.StagedUploadCleanupService", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import java.util.UUID", + "import kotlin.time.Duration.Companion.seconds", + "import kotlinx.coroutines.delay", + "import org.springframework.stereotype.Component" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/web", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"collectList\"?+ (\"return \\\"chat\\\"\" | \"return \\\"index\\\"\" | \"return \\\"jobs\\\"\" | \"return \\\"knowledge-bases\\\"\" | \"return \\\"upload\\\"\")? \"awaitSingle\"?+ \"try\"? \"handleUpload\"?+ \"name\"? (\"IllegalArgumentException\" | \"InvalidUploadRequestException\" | \"KnowledgeBaseNotFoundException\" | \"RuntimeException\" | \"badRequest\" | \"body\" | \"catch\" | \"internalServerError\" | \"mapOf\" | \"message\" | \"return ResponseEntity.badRequest()\n .body(mapOf(\\\"error\\\" to (e.message ?: \\\"Invalid request\\\")))\" | \"return ResponseEntity.badRequest()\n .body(mapOf(\\\"error\\\" to (e.message ?: \\\"Invalid upload request\\\")))\" | \"return ResponseEntity.badRequest()\n .body(mapOf(\\\"error\\\" to (e.message ?: \\\"Knowledge base not found\\\")))\" | \"return ResponseEntity.internalServerError()\n .body(mapOf(\\\"error\\\" to \\\"Failed to upload files: ${e.message}\\\"))\")?+ \"mutableMapOf\"?+ \"String\"?+ \"Any\"? \"batchId\"? \"fileCount\"? \"files\"? \"if\"? \"jobTriggered\"? \"jobId\"? \"jobError\"? \"let\"?+ \"return ResponseEntity.ok(response)\"? \"ok\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.controller.UploadWorkflow", + "import eu.corentic.springrag.controller.InvalidUploadRequestException", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseNotFoundException", + "import java.security.Principal", + "import kotlinx.coroutines.reactor.awaitSingle", + "import org.springframework.http.MediaType", + "import org.springframework.http.ResponseEntity", + "import org.springframework.http.codec.multipart.FilePart", + "import org.springframework.stereotype.Controller", + "import org.springframework.web.bind.annotation.PostMapping", + "import org.springframework.web.bind.annotation.RequestParam", + "import org.springframework.web.bind.annotation.RequestPart", + "import org.springframework.web.bind.annotation.ResponseBody", + "import reactor.core.publisher.Flux", + "import org.springframework.web.bind.annotation.GetMapping" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/config", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"from\"?+ \"bindToWebHandler\"?+ \"webTestClient\"? \"post\"?+ \"WebHandler\"? (\"OK\" | \"response\" | \"setStatusCode\")?+ \"setComplete\"?+ \"webFilter\"?+ \"build\"?+ (\"AtomicReference\" | \"String\")?+ \"WebFilterChain\"? (\"assertEquals\" | \"assertNull\" | \"block\" | \"empty\" | \"filter\" | \"get\" | \"set\")?+ \"uri\"?+ \"exchange\"?+ \"expectStatus\"?+ \"isOk\"?", + "mdl_score": 0, + "imports": [ + "import java.util.concurrent.atomic.AtomicReference", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNull", + "import org.junit.jupiter.api.Test", + "import org.slf4j.MDC", + "import org.springframework.mock.http.server.reactive.MockServerHttpRequest", + "import org.springframework.mock.web.server.MockServerWebExchange", + "import org.springframework.web.server.WebFilterChain", + "import reactor.core.publisher.Mono", + "import org.springframework.http.HttpStatus", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import org.springframework.web.server.WebHandler" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller", + "method_count": 83, + "algorithm": "CRX", + "grammar": "root ::= \"expectBody\"?+ \"post\"?+ \"jsonPath\"?+ \"uri\"?+ \"isEqualTo\"?+ \"exchange\"?+ \"expectStatus\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.ids.BatchId", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.service.job.BatchOwnershipService", + "import eu.corentic.springrag.service.job.JobService", + "import eu.corentic.springrag.service.job.BatchOwnershipException", + "import eu.corentic.springrag.service.job.JobStatus", + "import eu.corentic.springrag.service.job.JobStatusType", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseApplicationService", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseResponse", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.verify", + "import java.nio.file.Path", + "import java.time.Duration", + "import java.time.LocalDateTime", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.io.TempDir", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import eu.corentic.springrag.service.job.BatchNotFoundException", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.model.ChatResponse", + "import eu.corentic.springrag.model.Source", + "import eu.corentic.springrag.service.chat.ChatService", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import kotlinx.coroutines.test.runTest", + "import org.springframework.http.codec.json.JacksonJsonDecoder", + "import org.springframework.http.codec.json.JacksonJsonEncoder", + "import tools.jackson.databind.json.JsonMapper", + "import tools.jackson.module.kotlin.KotlinModule", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import eu.corentic.springrag.security.service.PasswordPolicyViolationException", + "import eu.corentic.springrag.security.service.UserAlreadyExistsException", + "import eu.corentic.springrag.service.knowledgebase.DocumentNotFoundInKnowledgeBaseException", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseAlreadyExistsException", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseSizeLimitExceededException", + "import eu.corentic.springrag.service.knowledgebase.InvalidKnowledgeBaseNameException", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseNotFoundException", + "import eu.corentic.springrag.service.job.JobAlreadyCompleteException", + "import eu.corentic.springrag.service.job.BatchOwnerRequiredException", + "import eu.corentic.springrag.service.job.JobAlreadyRunningException", + "import eu.corentic.springrag.service.job.JobExecutionNotFoundException", + "import eu.corentic.springrag.service.job.JobInputValidationException", + "import java.io.ByteArrayInputStream", + "import kotlin.test.assertEquals", + "import org.springframework.core.io.buffer.DataBufferLimitException", + "import org.springframework.core.MethodParameter", + "import org.springframework.http.HttpHeaders", + "import org.springframework.http.HttpInputMessage", + "import org.springframework.http.HttpStatus", + "import org.springframework.http.converter.HttpMessageNotReadableException", + "import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException", + "import eu.corentic.springrag.service.knowledgebase.CreateKnowledgeBaseRequest", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseListItem", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseStatistics", + "import io.mockk.just", + "import io.mockk.runs", + "import java.time.Instant", + "import kotlinx.coroutines.runBlocking", + "import org.springframework.http.MediaType", + "import eu.corentic.springrag.service.job.StagedUploadCleanupService", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import io.mockk.slot", + "import java.io.File", + "import org.springframework.http.client.MultipartBodyBuilder", + "import org.springframework.web.reactive.function.BodyInserters" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/auth", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= (\"CREATED\" | \"LoginRequest\" | \"LoginResponse\" | \"OK\" | \"ROLE_USER\" | \"RegisterRequest\" | \"UNAUTHORIZED\" | \"User\" | \"UserAlreadyExistsException\" | \"assertEquals\" | \"assertThrows\" | \"body\" | \"every\" | \"findByUsername\" | \"generateToken\" | \"login\" | \"matches\" | \"register\" | \"registerUser\" | \"runBlocking\" | \"statusCode\" | \"token\" | \"username\")?+ \"init\"?+ \"Map\"?+ \"name\"? \"AuthController\"? \"assertTrue\"? \"role\"?", + "mdl_score": 34845, + "imports": [ + "import eu.corentic.springrag.security.model.Role", + "import eu.corentic.springrag.security.model.User", + "import eu.corentic.springrag.security.service.JwtService", + "import eu.corentic.springrag.security.service.UserAlreadyExistsException", + "import eu.corentic.springrag.security.service.UserService", + "import io.mockk.MockKAnnotations", + "import io.mockk.every", + "import io.mockk.impl.annotations.MockK", + "import kotlinx.coroutines.runBlocking", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.assertThrows", + "import org.springframework.http.HttpStatus", + "import org.springframework.security.crypto.password.PasswordEncoder" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/librechat", + "method_count": 46, + "algorithm": "CRX", + "grammar": "root ::= \"exchange\"?+ \"every\"? (\"get\" | \"post\")?+ \"expectStatus\"?+ \"uri\"?+ \"isOk\"? \"contentType\"?+ \"expectBody\"?+ \"jsonPath\"?+ \"isEqualTo\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalInvoker", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalRequest", + "import eu.corentic.springrag.agent.rag.librechat.LibreChatRetrievalResult", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import eu.corentic.springrag.controller.GlobalExceptionHandler", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.GraphTableElement", + "import eu.corentic.springrag.model.GraphTextElement", + "import eu.corentic.springrag.model.ParsedDocument", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.service.job.JobService", + "import eu.corentic.springrag.service.job.JobStatus", + "import eu.corentic.springrag.service.job.JobStatusType", + "import eu.corentic.springrag.service.port.AgentKnowledgeBasePort", + "import eu.corentic.springrag.service.port.DocumentIdPort", + "import eu.corentic.springrag.service.port.DocumentImageInfo", + "import eu.corentic.springrag.service.port.DocumentImagePort", + "import eu.corentic.springrag.service.port.DocumentParserPort", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import eu.corentic.springrag.service.port.VectorDocumentDeletionPort", + "import eu.corentic.springrag.service.port.VectorDocumentPort", + "import kotlinx.coroutines.CoroutineDispatcher", + "import kotlinx.coroutines.test.UnconfinedTestDispatcher", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.slot", + "import io.mockk.verify", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.springframework.http.HttpMethod", + "import org.springframework.http.MediaType", + "import org.springframework.http.client.MultipartBodyBuilder", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import org.springframework.web.reactive.function.BodyInserters", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotNull", + "import kotlin.test.assertTrue", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.controller.InvalidUploadRequestException", + "import eu.corentic.springrag.service.job.StagedUploadCleanupService", + "import kotlinx.coroutines.test.runTest", + "import org.springframework.core.io.buffer.DefaultDataBufferFactory", + "import org.springframework.http.HttpHeaders", + "import org.springframework.http.codec.multipart.FilePart", + "import reactor.core.publisher.Flux", + "import kotlin.test.assertContains", + "import kotlin.test.assertFailsWith" + ], + "arg_patterns": {} + }, + { + "label": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/web", + "method_count": 10, + "algorithm": "CRX", + "grammar": "root ::= \"verify\"? \"RuntimeException\"? \"runBlocking\"? \"handleFileUpload\"?+ \"controller\"? \"just\"?+ (\"every\" | \"knowledgeBaseExists\")?+ \"filePart\"? \"startBulkJob\"?+ (\"OK\" | \"assertEquals\" | \"statusCode\")?+ \"any\"?+ \"body\"? \"get\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.controller.UploadWorkflow", + "import eu.corentic.springrag.service.job.BatchOwnershipService", + "import eu.corentic.springrag.service.job.JobService", + "import eu.corentic.springrag.service.job.StagedUploadCleanupService", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseApplicationService", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import eu.corentic.springrag.service.knowledgebase.KnowledgeBaseResponse", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.verify", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import java.time.Duration", + "import java.time.Instant", + "import kotlinx.coroutines.runBlocking", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertFalse", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.io.TempDir", + "import org.springframework.http.HttpHeaders", + "import org.springframework.http.HttpStatus", + "import org.springframework.http.codec.multipart.FilePart", + "import reactor.core.publisher.Flux", + "import reactor.core.publisher.Mono" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"return CommandLineRunner {\n try {\n driver.session().use { session ->\n logger.info { \\\"[NEO4J] Initializing schema constraints...\\\" }\n\n session.run(\n \\\"CREATE CONSTRAINT document_id_unique IF NOT EXISTS FOR (d:Document) REQUIRE d.id IS UNIQUE\\\"\n )\n session.run(\n \\\"CREATE CONSTRAINT page_id_unique IF NOT EXISTS FOR (p:Page) REQUIRE p.id IS UNIQUE\\\"\n )\n session.run(\n \\\"CREATE CONSTRAINT image_id_unique IF NOT EXISTS FOR (i:ImageData) REQUIRE i.id IS UNIQUE\\\"\n )\n session.run(\n \\\"CREATE CONSTRAINT text_id_unique IF NOT EXISTS FOR (t:TextElement) REQUIRE t.id IS UNIQUE\\\"\n )\n session.run(\n \\\"CREATE CONSTRAINT table_id_unique IF NOT EXISTS FOR (t:TableElement) REQUIRE t.id IS UNIQUE\\\"\n )\n session.run(\n \\\"CREATE CONSTRAINT header_id_unique IF NOT EXISTS FOR (h:SectionHeaderElement) REQUIRE h.id IS UNIQUE\\\"\n )\n session.run(\n \\\"CREATE CONSTRAINT picture_id_unique IF NOT EXISTS FOR (p:PictureElement) REQUIRE p.id IS UNIQUE\\\"\n )\n session.run(\n \\\"CREATE CONSTRAINT knowledge_base_id_unique IF NOT EXISTS FOR (kb:KnowledgeBase) REQUIRE kb.id IS UNIQUE\\\"\n )\n\n session.run(\\\"MATCH (d:Document) WHERE d.version IS NULL SET d.version = 0\\\")\n session.run(\\\"MATCH (p:Page) WHERE p.version IS NULL SET p.version = 0\\\")\n session.run(\\\"MATCH (i:ImageData) WHERE i.version IS NULL SET i.version = 0\\\")\n session.run(\\\"MATCH (t:TextElement) WHERE t.version IS NULL SET t.version = 0\\\")\n session.run(\\\"MATCH (t:TableElement) WHERE t.version IS NULL SET t.version = 0\\\")\n session.run(\\\"MATCH (p:PictureElement) WHERE p.version IS NULL SET p.version = 0\\\")\n session.run(\\\"MATCH (h:SectionHeaderElement) WHERE h.version IS NULL SET h.version = 0\\\")\n session.run(\\\"MATCH (k:KnowledgeBase) WHERE k.version IS NULL SET k.version = 0\\\")\n\n logger.info { \\\"[NEO4J] All unique constraints verified/created\\\" }\n }\n } catch (e: RuntimeException) {\n logger.error(e) { \\\"[NEO4J] Failed to initialize schema\\\" }\n throw e\n }\n }\"? \"return Neo4jTransactionManager(driver)\"? \"builder\"?+ \"CommandLineRunner\"? \"Neo4jTransactionManager\"? \"chatMemoryRepository\"?+ \"try\"? \"maxMessages\"?+ \"session\"?+ \"build\"?+ \"use\"?+ (\"info\" | \"run\")?+ \"catch\"? \"RuntimeException\"? \"error\"?+ \"throw e\"? \"throw\"?", + "mdl_score": 0, + "imports": [ + "import org.springframework.ai.chat.memory.ChatMemory", + "import org.springframework.ai.chat.memory.ChatMemoryRepository", + "import org.springframework.ai.chat.memory.MessageWindowChatMemory", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import org.neo4j.driver.Driver", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty", + "import org.springframework.context.annotation.Primary", + "import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager", + "import org.springframework.transaction.PlatformTransactionManager", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.boot.CommandLineRunner" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/config", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"timeout\"? \"connectTimeout\"? (\"region\" | \"writeValueAsString\")?+ \"read\"? \"toMillis\"?+ \"coerceAtMost\"?+ \"MAX_VALUE\"? \"toLong\"?+ \"toInt\"?+ (\"CONNECT_TIMEOUT_MILLIS\" | \"END\" | \"InputType\" | \"LoggingCohereEmbeddingBedrockApi\" | \"ReactorClientHttpRequestFactory\" | \"ReadTimeoutHandler\" | \"SEARCH_DOCUMENT\" | \"SECONDS\" | \"Truncate\" | \"WriteTimeoutHandler\" | \"addHandlerLast\" | \"baseUrl\" | \"build\" | \"builder\" | \"create\" | \"debug\" | \"doOnConnected\" | \"embedding\" | \"embeddings\" | \"firstOrNull\" | \"getModelId\" | \"info\" | \"inputType\" | \"ofSeconds\" | \"option\" | \"readTimeout\" | \"requestFactory\" | \"responseTimeout\" | \"restClientBuilder\" | \"return OllamaApi.builder()\n .baseUrl(properties.baseUrl)\n .restClientBuilder(restClientBuilder)\n .build()\" | \"return ReactorClientHttpRequestFactory(httpClient)\" | \"return try {\n val response = super.embedding(request)\n logger.debug { \\\"Cohere embedding success: ${response.embeddings().size} embeddings\\\" }\n response\n } catch (e: Exception) {\n logger.error(e) { \\\"Cohere embedding failed: ${e.message}\\\" }\n throw e\n }\" | \"seconds\" | \"size\" | \"take\" | \"texts\" | \"trace\" | \"truncate\" | \"try\" | \"writeTimeout\")?+ \"catch\"? \"return BedrockCohereEmbeddingModel(api, options)\"? \"Exception\"? \"BedrockCohereEmbeddingModel\"? \"error\"?+ \"message\"? \"throw e\"? \"throw\"?", + "mdl_score": 0, + "imports": [ + "import io.netty.channel.ChannelOption", + "import io.netty.handler.timeout.ReadTimeoutHandler", + "import io.netty.handler.timeout.WriteTimeoutHandler", + "import java.util.concurrent.TimeUnit", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import org.springframework.http.client.ClientHttpRequestFactory", + "import org.springframework.http.client.ReactorClientHttpRequestFactory", + "import reactor.netty.http.client.HttpClient", + "import com.fasterxml.jackson.databind.ObjectMapper", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.ai.bedrock.cohere.BedrockCohereEmbeddingModel", + "import org.springframework.ai.bedrock.cohere.BedrockCohereEmbeddingOptions", + "import org.springframework.ai.bedrock.cohere.api.CohereEmbeddingBedrockApi", + "import org.springframework.ai.bedrock.cohere.api.CohereEmbeddingBedrockApi.CohereEmbeddingRequest", + "import org.springframework.ai.bedrock.cohere.api.CohereEmbeddingBedrockApi.CohereEmbeddingResponse", + "import org.springframework.ai.embedding.EmbeddingModel", + "import org.springframework.beans.factory.annotation.Qualifier", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty", + "import org.springframework.context.annotation.Primary", + "import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider", + "import software.amazon.awssdk.regions.providers.AwsRegionProvider", + "import java.time.Duration", + "import org.springframework.ai.ollama.api.OllamaApi", + "import org.springframework.context.annotation.Profile", + "import org.springframework.web.client.RestClient" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/health", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"run\"?+ \"fromCallable\"?+ \"Supplier\"? \"runWithCircuitBreaker\"? \"action\"? \"listModels\"?+ \"throw throwable ?: IllegalStateException(\\\"Ollama circuit breaker fallback\\\")\"? \"models\"?+ \"throw\"? \"subscribeOn\"?+ \"IllegalStateException\"? \"boundedElastic\"?+ \"map\"?+ \"mapNotNull\"?+ \"name\"?+ \"listOf\"?+ \"filterNot\"?+ \"any\"?+ \"modelMatches\"? \"if\"? \"isEmpty\"?+ \"return true\"? \"up\"?+ \"substringBefore\"?+ (\"build\" | \"down\" | \"else\" | \"just\" | \"onErrorResume\" | \"withDetail\")?+ \"return normalizedRequired == normalizedAvailable\"?", + "mdl_score": 0, + "imports": [ + "import org.springframework.ai.ollama.api.OllamaApi", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.boot.health.contributor.Health", + "import org.springframework.boot.health.contributor.ReactiveHealthIndicator", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import org.springframework.context.annotation.Profile", + "import org.springframework.stereotype.Component", + "import java.util.function.Supplier", + "import reactor.core.publisher.Mono", + "import reactor.core.scheduler.Schedulers" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/config", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"assertThrows\"? \"IllegalArgumentException\"? \"java\"? \"OllamaClientProperties\"? \"EmbabelAiHttpClientProperties\"? \"Timeout\"?+ (\"assertEquals\" | \"baseUrl\" | \"ofSeconds\" | \"readTimeout\" | \"writeTimeout\")?+ \"timeout\"? \"connectTimeout\"? \"read\"?", + "mdl_score": 12825, + "imports": [ + "import java.time.Duration", + "import kotlin.test.assertEquals", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import org.junit.jupiter.api.Test" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/health", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"`when`\"? \"listModels\"?+ \"thenThrow\"?+ \"thenReturn\"?+ \"RuntimeException\"? \"ListModelResponse\"?+ \"listOf\"?+ (\"Model\" | \"now\")?+ \"requireNotNull\"?+ \"OllamaHealthIndicator\"? \"NoOpCircuitBreakerFactory\"? \"health\"?+ \"block\"?+ \"assertEquals\"? \"status\"? \"code\"?", + "mdl_score": 0, + "imports": [ + "import java.time.Instant", + "import eu.corentic.springrag.testsupport.NoOpCircuitBreakerFactory", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import org.mockito.Mockito.mock", + "import org.mockito.Mockito.`when`", + "import org.springframework.ai.ollama.api.OllamaApi" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/service/embedding", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"builder\"?+ (\"BedrockCohereEmbeddingModel\" | \"CapturingCohereApi\" | \"CohereEmbeddingResponse\" | \"EmbeddingRequest\" | \"FloatArray\" | \"InputType\" | \"NONE\" | \"SEARCH_DOCUMENT\" | \"Truncate\" | \"assertEquals\" | \"assertNotNull\" | \"build\" | \"call\" | \"capturedRequest\" | \"embed\" | \"inputType\" | \"listOf\" | \"map\" | \"println\" | \"readTree\" | \"return CohereEmbeddingResponse(\n \\\"test-id\\\",\n fakeEmbeddings,\n request.texts(),\n \\\"embeddings_floats\\\",\n null\n )\" | \"texts\" | \"truncate\" | \"writeValueAsString\")?+", + "mdl_score": 1027200, + "imports": [ + "import com.fasterxml.jackson.databind.ObjectMapper", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import org.junit.jupiter.api.Test", + "import org.springframework.ai.bedrock.cohere.BedrockCohereEmbeddingModel", + "import org.springframework.ai.bedrock.cohere.BedrockCohereEmbeddingOptions", + "import org.springframework.ai.bedrock.cohere.api.CohereEmbeddingBedrockApi", + "import org.springframework.ai.bedrock.cohere.api.CohereEmbeddingBedrockApi.CohereEmbeddingRequest", + "import org.springframework.ai.bedrock.cohere.api.CohereEmbeddingBedrockApi.CohereEmbeddingResponse", + "import org.springframework.ai.embedding.EmbeddingRequest", + "import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider", + "import software.amazon.awssdk.regions.Region", + "import java.time.Duration" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/testsupport", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"Any\" | \"Builder\" | \"get\")+", + "mdl_score": 15, + "imports": [ + "import java.util.function.Function", + "import java.util.function.Supplier", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreaker", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import org.springframework.cloud.client.circuitbreaker.ConfigBuilder" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/chat-memory/src/test/kotlin/eu/corentic/springrag/config", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"Message\"? \"ChatMemoryConfig\"? (\"Any\" | \"MutableMap\" | \"String\" | \"fun\" | \"mutableMapOf\")?+ \"chatMemory\"?+ \"MessageType\"? \"repeat\"?+ \"USER\"? (\"add\" | \"makeMessage\")?+ (\"assertEquals\" | \"get\" | \"size\" | \"text\")?+", + "mdl_score": 0, + "imports": [ + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import org.springframework.ai.chat.memory.InMemoryChatMemoryRepository", + "import org.springframework.ai.chat.messages.Message", + "import org.springframework.ai.chat.messages.MessageType" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"fromCallable\"?+ (\"File\" | \"builder\")?+ \"health\"?+ \"subscribeOn\"?+ \"boundedElastic\"?+ (\"ByteArray\" | \"DocumentParsingRequest\" | \"GraphDocument\" | \"absolutePath\" | \"asDocumentId\" | \"asFilename\" | \"asJobId\" | \"asLogicalDocumentId\" | \"assertTrue\" | \"build\" | \"content\" | \"convertDocument\" | \"doTableStructure\" | \"down\" | \"else\" | \"emptyList\" | \"every\" | \"exists\" | \"filename\" | \"generatePageImages\" | \"getStatus\" | \"if\" | \"imagesScale\" | \"just\" | \"let\" | \"map\" | \"name\" | \"onErrorResume\" | \"options\" | \"readBytes\" | \"requireNotNull\" | \"up\" | \"value\" | \"withDetail\")?+ \"tables\"? \"jobId\"? \"isNotEmpty\"?+ \"return ParsedDocument(graphDocument = graphDocument)\"? \"parse\"?+ \"assertEquals\"? \"assertNull\"? \"ParsedDocument\"? \"graphDocument\"?", + "mdl_score": 0, + "imports": [ + "import ai.docling.serve.api.DoclingServeApi", + "import org.springframework.boot.health.contributor.Health", + "import org.springframework.boot.health.contributor.ReactiveHealthIndicator", + "import org.springframework.stereotype.Component", + "import reactor.core.publisher.Mono", + "import reactor.core.scheduler.Schedulers", + "import eu.corentic.springrag.service.docling.DoclingGraphDocumentMapper", + "import eu.corentic.springrag.service.docling.DoclingService", + "import eu.corentic.springrag.service.port.DocumentParserPort", + "import eu.corentic.springrag.service.port.DocumentParsingRequest", + "import eu.corentic.springrag.model.ParsedDocument", + "import eu.corentic.springrag.config.BaseSystemTest", + "import eu.corentic.springrag.config.DoclingConfig", + "import java.io.File", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.core.io.ClassPathResource", + "import org.springframework.test.context.TestPropertySource", + "import ai.docling.core.DoclingDocument", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import io.mockk.every", + "import io.mockk.mockk", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNull" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/config", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"IllegalStateException\" | \"bucket\" | \"error\" | \"generatePageImages\" | \"generatePictureImages\" | \"if\" | \"imageExportMode\" | \"includeImages\" | \"info\" | \"isBlank\" | \"s3Target\" | \"setOf\" | \"throw\" | \"throw IllegalStateException(errorMsg)\" | \"toFormats\" | \"useS3Target\")?+ \"Method\"? \"validateCriticalSettings\"? (\"DoclingServeJackson3Client\" | \"getDeclaredMethod\" | \"invoke\" | \"isAccessible\" | \"java\")?+ \"Builder\"? \"return builder\n .baseUrl(URI.create(config.baseUrl))\n .asyncPollInterval(Duration.ofMillis(config.pollIntervalMillis))\n .asyncTimeout(Duration.ofSeconds(config.timeoutSeconds))\n .build()\"? (\"baseUrl\" | \"create\")?+ \"asyncPollInterval\"?+ \"ofMillis\"?+ \"pollIntervalMillis\"? \"asyncTimeout\"?+ \"ofSeconds\"?+ \"timeoutSeconds\"? \"build\"?+", + "mdl_score": 0, + "imports": [ + "import ai.docling.serve.api.DoclingServeApi", + "import ai.docling.serve.client.DoclingServeJackson3Client", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import java.lang.reflect.Method", + "import java.net.URI", + "import java.time.Duration", + "import jakarta.validation.constraints.Min", + "import jakarta.validation.constraints.NotBlank", + "import jakarta.annotation.PostConstruct", + "import org.slf4j.LoggerFactory", + "import org.springframework.boot.context.properties.ConfigurationProperties", + "import org.springframework.validation.annotation.Validated" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/service/docling", + "method_count": 21, + "imports": [ + "import com.google.auth.oauth2.GoogleCredentials", + "import com.google.auth.oauth2.IdTokenCredentials", + "import com.google.auth.oauth2.IdTokenProvider", + "import ai.docling.core.DoclingDocument", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.GraphImagePayload", + "import eu.corentic.springrag.model.GraphPage", + "import eu.corentic.springrag.model.GraphPictureElement", + "import eu.corentic.springrag.model.GraphTableElement", + "import eu.corentic.springrag.model.GraphTextElement", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.stereotype.Component", + "import java.util.Base64", + "import ai.docling.serve.api.DoclingServeApi", + "import ai.docling.serve.api.convert.request.options.ConvertDocumentOptions", + "import ai.docling.serve.api.convert.request.options.ImageRefMode", + "import ai.docling.serve.api.convert.request.options.OcrEngine", + "import ai.docling.serve.api.convert.request.options.PdfBackend", + "import ai.docling.serve.api.convert.request.options.ProcessingPipeline", + "import ai.docling.serve.api.convert.request.options.OutputFormat", + "import ai.docling.serve.api.convert.request.source.FileSource", + "import ai.docling.serve.api.convert.request.target.InBodyTarget", + "import ai.docling.serve.api.convert.request.target.S3Target", + "import eu.corentic.springrag.config.DoclingConfig", + "import java.util.function.Supplier", + "import java.time.Duration", + "import jakarta.annotation.PostConstruct", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import org.springframework.stereotype.Service" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src/systemTest/kotlin/eu/corentic/springrag/config", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"assumeTrue\"?+ \"return try {\n buildWithNoArgFactory(config)\n } catch (_: NoSuchMethodException) {\n buildWithClassLoaderFactory(config)\n }\"? \"registerProperties\"?+ \"DoclingServeClientBuilderFactory\"? \"corentic\"? \"try\"? \"springrag\"? (\"ClassLoader\" | \"String\" | \"baseUrl\" | \"getMethod\" | \"invoke\" | \"java\" | \"javaClass\" | \"return buildMethod.invoke(configuredBuilder) as DoclingServeApi\")?+ \"buildWithNoArgFactory\"? \"testcontainers\"? \"classLoader\"? \"DoclingServeApi\"? \"GpuSupport\"? \"return configureAndBuild(builder, config)\"? (\"ClassCastException\" | \"IllegalAccessException\" | \"IllegalStateException\" | \"InvocationTargetException\" | \"NoSuchMethodException\" | \"catch\" | \"cause\" | \"throw\" | \"throw IllegalStateException(\\\"Docling test client builder API is incompatible\\\", e)\" | \"throw IllegalStateException(\\\"Docling test client builder API is not accessible\\\", e)\" | \"throw IllegalStateException(\\\"Docling test client builder invocation failed\\\", e.cause ?: e)\" | \"throw IllegalStateException(\\\"Docling test client builder returned an unexpected type\\\", e)\")?+ \"isDockerAvailable\"?+ \"configureAndBuild\"? \"buildWithClassLoaderFactory\"? \"start\"?+ \"pullAndWarmup\"?+ \"ollamaContainer\"?", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.testcontainers.OllamaModelSupport", + "import eu.corentic.springrag.testcontainers.SharedContainers", + "import eu.corentic.springrag.testcontainers.SharedContainers.ContainerType", + "import org.junit.jupiter.api.Assumptions", + "import org.junit.jupiter.api.BeforeAll", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.test.context.ActiveProfiles", + "import org.springframework.test.context.DynamicPropertyRegistry", + "import org.springframework.test.context.DynamicPropertySource", + "import org.testcontainers.junit.jupiter.Testcontainers", + "import ai.docling.serve.api.DoclingServeApi", + "import ai.docling.serve.client.DoclingServeClientBuilderFactory", + "import java.lang.reflect.InvocationTargetException", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/config", + "method_count": 12, + "algorithm": "CRX", + "grammar": "root ::= \"DoclingConfig\"? \"assertThatThrownBy\"? \"baseUrl\"? \"validateCriticalSettings\"?+ (\"includeImages\" | \"options\")?+ \"isInstanceOf\"?+ \"imageExportMode\"? \"IllegalStateException\"? \"java\"? \"hasMessageContaining\"?+", + "mdl_score": 18, + "imports": [ + "import kotlin.test.assertNotNull", + "import org.junit.jupiter.api.Test", + "import org.assertj.core.api.Assertions.assertThat", + "import org.assertj.core.api.Assertions.assertThatThrownBy", + "import org.junit.jupiter.api.Assertions.assertNull" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/health", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"`when`\"? (\"DoclingHealthIndicator\" | \"IllegalStateException\" | \"RuntimeException\" | \"assertEquals\" | \"block\" | \"build\" | \"builder\" | \"health\" | \"requireNotNull\" | \"status\" | \"thenReturn\" | \"thenThrow\")?+ \"code\"?", + "mdl_score": 685824, + "imports": [ + "import ai.docling.serve.api.DoclingServeApi", + "import ai.docling.serve.api.health.HealthCheckResponse", + "import kotlin.test.assertEquals", + "import org.junit.jupiter.api.Test", + "import org.mockito.Mockito.mock", + "import org.mockito.Mockito.`when`" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/service/docling", + "method_count": 10, + "algorithm": "CRX", + "grammar": "root ::= \"options\"? \"mockk\"? \"DoclingDocument\"? (\"builder\" | \"document\")?+ \"jsonContent\"?+ (\"build\" | \"status\")?+ \"slot\"? \"ConvertDocumentRequest\"? \"every\"? \"convertSourceAsync\"?+ \"capture\"? \"completedFuture\"?+ \"convertDocument\"?+ \"toByteArray\"?+ \"captured\"?", + "mdl_score": 0, + "imports": [ + "import ai.docling.core.DoclingDocument", + "import eu.corentic.springrag.common.ids.asJobId", + "import java.util.Base64", + "import org.junit.jupiter.api.Assertions.assertArrayEquals", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import ai.docling.serve.api.DoclingServeApi", + "import ai.docling.serve.api.convert.request.ConvertDocumentRequest", + "import ai.docling.serve.api.convert.request.options.ImageRefMode", + "import ai.docling.serve.api.convert.request.options.OcrEngine", + "import ai.docling.serve.api.convert.request.options.OutputFormat", + "import ai.docling.serve.api.convert.request.options.PdfBackend", + "import ai.docling.serve.api.convert.request.options.ProcessingPipeline", + "import ai.docling.serve.api.convert.response.InBodyConvertDocumentResponse", + "import ai.docling.serve.api.convert.response.DocumentResponse", + "import eu.corentic.springrag.config.DoclingConfig", + "import eu.corentic.springrag.config.PipelineOptions", + "import eu.corentic.springrag.testsupport.NoOpCircuitBreakerFactory", + "import io.mockk.clearAllMocks", + "import tools.jackson.databind.ObjectMapper", + "import ai.docling.serve.api.convert.request.target.S3Target", + "import ai.docling.serve.api.convert.request.target.InBodyTarget", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.slot", + "import io.mockk.verify", + "import java.util.concurrent.CompletableFuture", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotNull", + "import kotlin.test.assertTrue", + "import org.junit.jupiter.api.AfterEach", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.assertThrows" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/testsupport", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"Any\" | \"Builder\" | \"get\")+", + "mdl_score": 15, + "imports": [ + "import java.util.function.Function", + "import java.util.function.Supplier", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreaker", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import org.springframework.cloud.client.circuitbreaker.ConfigBuilder" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/health", + "method_count": 7, + "algorithm": "CRX", + "grammar": "root ::= \"withDetail\"?+ \"build\"?+ \"onErrorResume\"?+ \"just\"?+", + "mdl_score": 4, + "imports": [ + "import org.neo4j.driver.Driver", + "import java.time.Duration", + "import org.springframework.boot.health.contributor.Health", + "import org.springframework.boot.health.contributor.ReactiveHealthIndicator", + "import org.springframework.stereotype.Component", + "import reactor.core.publisher.Mono", + "import com.google.common.util.concurrent.FutureCallback", + "import com.google.common.util.concurrent.Futures", + "import com.google.common.util.concurrent.ListenableFuture", + "import com.google.common.util.concurrent.MoreExecutors", + "import io.qdrant.client.QdrantClient", + "import java.util.concurrent.ExecutionException", + "import java.util.concurrent.TimeoutException", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.context.annotation.Profile" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/model/graph", + "method_count": 9, + "algorithm": "CRX", + "grammar": "root ::= (\"id\" | \"if\" | \"jobId\" | \"pageNo\" | \"return false\" | \"return true\")?+ \"hashCode\"?+ \"return result\"?", + "mdl_score": 2568, + "imports": [ + "import java.time.Instant", + "import org.springframework.data.annotation.Version", + "import org.springframework.data.neo4j.core.schema.Id", + "import org.springframework.data.neo4j.core.schema.Node", + "import org.springframework.data.neo4j.core.schema.Relationship", + "import org.springframework.data.neo4j.core.schema.Property" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/repository", + "method_count": 24, + "algorithm": "CRX", + "grammar": "root ::= \"builder\"?+ \"build\"?+ \"query\"?+ \"return runWithCircuitBreaker { vectorStore.similaritySearch(request).map { it.toVectorChunk() } }\"? \"topK\"?+ \"runWithCircuitBreaker\"? \"filterExpression\"?+ \"similaritySearch\"?+ \"map\"?+ \"toVectorChunk\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.model.VectorChunk", + "import org.springframework.ai.document.Document", + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import java.util.function.Supplier", + "import org.springframework.ai.vectorstore.SearchRequest", + "import org.springframework.ai.vectorstore.VectorStore", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.stereotype.Repository" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/agent", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"return try {\n val existingId = agentRepository.findKnowledgeBaseIdByAgentId(agentId)\n if (existingId != null) return existingId\n doCreate(agentId)\n } catch (e: Exception) {\n // Concurrent thread created the agent+KB first \u2014 read and return their result.\n agentRepository.findKnowledgeBaseIdByAgentId(agentId) ?: throw e\n }\"? \"now\"?+ \"return agentRepository.findKnowledgeBaseIdByAgentId(agentId)\"? \"try\"? (\"KnowledgeBaseNode\" | \"save\")?+ (\"Exception\" | \"catch\" | \"doCreate\" | \"findKnowledgeBaseIdByAgentId\" | \"if\" | \"return existingId\")?+ \"AgentNode\"? \"throw e\"? \"return kbId\"? \"throw\"?", + "mdl_score": 3132, + "imports": [ + "import eu.corentic.springrag.model.graph.AgentNode", + "import eu.corentic.springrag.model.graph.KnowledgeBaseNode", + "import eu.corentic.springrag.repository.graph.AgentRepository", + "import eu.corentic.springrag.repository.graph.KnowledgeBaseRepository", + "import eu.corentic.springrag.service.port.AgentKnowledgeBasePort", + "import org.springframework.stereotype.Service", + "import org.springframework.transaction.annotation.Transactional", + "import java.time.Instant" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/cleanup", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"info\"?+ (\"deleteByJobId\" | \"deleteByKnowledgeBaseId\" | \"jobId\" | \"knowledgeBaseId\" | \"value\")?+", + "mdl_score": 1685, + "imports": [ + "import eu.corentic.springrag.model.event.DocumentDeletionRequested", + "import eu.corentic.springrag.service.graph.GraphIngestionOrchestrator", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty", + "import org.springframework.modulith.events.ApplicationModuleListener", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.model.event.KnowledgeBaseDeletionRequested", + "import eu.corentic.springrag.repository.VectorRepository" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/graph", + "method_count": 12, + "imports": [ + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.model.DocumentGraphJob", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.GraphImagePayload", + "import eu.corentic.springrag.model.GraphPictureElement", + "import eu.corentic.springrag.model.GraphTableElement", + "import eu.corentic.springrag.model.GraphTextElement", + "import eu.corentic.springrag.model.graph.DocumentJobNode", + "import eu.corentic.springrag.model.graph.ImageData", + "import eu.corentic.springrag.model.graph.PageNode", + "import eu.corentic.springrag.model.graph.PictureElement", + "import eu.corentic.springrag.model.graph.TableElement", + "import eu.corentic.springrag.model.graph.TextElement", + "import eu.corentic.springrag.service.port.DocumentGraphJobPort", + "import eu.corentic.springrag.service.port.GraphIndexPort", + "import eu.corentic.springrag.service.port.KnowledgeBasePort", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import java.util.function.Supplier", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import org.springframework.stereotype.Component", + "import org.springframework.transaction.annotation.Propagation", + "import org.springframework.transaction.annotation.Transactional", + "import java.time.Instant", + "import java.util.concurrent.CompletableFuture", + "import java.util.concurrent.Executors" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/port/adapter", + "method_count": 45, + "imports": [ + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.model.PageTextElement", + "import eu.corentic.springrag.model.SourceImage", + "import eu.corentic.springrag.repository.graph.ImageDataRepository", + "import eu.corentic.springrag.repository.graph.TextElementRepository", + "import eu.corentic.springrag.repository.graph.TableElementRepository", + "import eu.corentic.springrag.service.port.ChatGraphLookupPort", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import java.util.Base64", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import eu.corentic.springrag.model.DocumentGraphJob", + "import eu.corentic.springrag.model.graph.DocumentJobNode", + "import eu.corentic.springrag.repository.graph.DocumentJobNodeRepository", + "import eu.corentic.springrag.service.port.DocumentGraphJobPort", + "import java.time.Instant", + "import eu.corentic.springrag.service.port.DocumentIdPort", + "import eu.corentic.springrag.service.port.DocumentImageInfo", + "import eu.corentic.springrag.service.port.DocumentImagePort", + "import eu.corentic.springrag.repository.graph.GraphMaintenanceRepository", + "import eu.corentic.springrag.service.graph.GraphDeletePort", + "import eu.corentic.springrag.service.graph.GraphStorePort", + "import eu.corentic.springrag.service.port.KnowledgeBaseDocumentPort", + "import eu.corentic.springrag.model.KnowledgeBase", + "import eu.corentic.springrag.model.KnowledgeBaseStats", + "import eu.corentic.springrag.model.graph.KnowledgeBaseNode", + "import eu.corentic.springrag.repository.graph.KnowledgeBaseRepository", + "import eu.corentic.springrag.service.port.KnowledgeBasePort", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.repository.VectorRepository", + "import eu.corentic.springrag.service.port.ChunkIndexPort", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import eu.corentic.springrag.service.port.VectorDocumentDeletionPort", + "import eu.corentic.springrag.service.port.VectorDocumentPort", + "import eu.corentic.springrag.service.port.RetrievalPort" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/storage", + "method_count": 40, + "imports": [ + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.config.ObjectStorageProperties", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty", + "import org.springframework.stereotype.Component", + "import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider", + "import software.amazon.awssdk.regions.Region", + "import software.amazon.awssdk.services.s3.S3Client", + "import software.amazon.awssdk.services.s3.model.Delete", + "import software.amazon.awssdk.services.s3.model.DeleteObjectRequest", + "import software.amazon.awssdk.services.s3.model.DeleteObjectsRequest", + "import software.amazon.awssdk.services.s3.model.HeadObjectRequest", + "import software.amazon.awssdk.services.s3.model.ListObjectsV2Request", + "import software.amazon.awssdk.services.s3.model.NoSuchBucketException", + "import software.amazon.awssdk.services.s3.model.PutObjectRequest", + "import software.amazon.awssdk.services.s3.model.S3Exception", + "import software.amazon.awssdk.core.sync.RequestBody", + "import com.google.cloud.storage.BlobId", + "import com.google.cloud.storage.BlobInfo", + "import com.google.cloud.storage.Storage", + "import com.google.cloud.storage.StorageOptions", + "import java.net.URI", + "import software.amazon.awssdk.auth.credentials.AwsBasicCredentials", + "import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider", + "import software.amazon.awssdk.services.s3.S3Configuration", + "import software.amazon.awssdk.services.s3.model.CreateBucketRequest", + "import software.amazon.awssdk.services.s3.model.HeadBucketRequest" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/config", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"run\"?+ \"assumeTrue\"?+ (\"recreateTestCollection\" | \"registerProperties\")?+ \"collectionPointCount\"?+ \"corentic\"? \"springrag\"? \"testcontainers\"? \"GpuSupport\"? \"isDockerAvailable\"?+ \"start\"?+ \"pullAndWarmup\"?+ \"ollamaContainer\"?", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.testcontainers.OllamaModelSupport", + "import eu.corentic.springrag.testcontainers.QdrantTestSupport", + "import eu.corentic.springrag.testcontainers.QdrantTestSupport.recreateTestCollection", + "import eu.corentic.springrag.testcontainers.SharedContainers", + "import eu.corentic.springrag.testcontainers.SharedContainers.ContainerType", + "import io.qdrant.client.QdrantClient", + "import org.junit.jupiter.api.Assumptions", + "import org.junit.jupiter.api.BeforeAll", + "import org.junit.jupiter.api.BeforeEach", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.test.context.ActiveProfiles", + "import org.springframework.test.context.DynamicPropertyRegistry", + "import org.springframework.test.context.DynamicPropertySource", + "import org.springframework.test.context.TestPropertySource", + "import org.testcontainers.junit.jupiter.Testcontainers" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/repository/graph", + "method_count": 23, + "algorithm": "CRX", + "grammar": "root ::= \"findById\"?+ \"saveAll\"?+ (\"parse\" | \"runBlocking\")?+ \"orElseThrow\"?+ \"listOf\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.config.BaseSystemTest", + "import eu.corentic.springrag.model.graph.DocumentJobNode", + "import eu.corentic.springrag.model.graph.ImageData", + "import eu.corentic.springrag.model.graph.KnowledgeBaseNode", + "import eu.corentic.springrag.model.graph.PageNode", + "import eu.corentic.springrag.model.graph.TextElement", + "import java.time.Instant", + "import org.junit.jupiter.api.Assertions.*", + "import org.junit.jupiter.api.Test", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.test.annotation.DirtiesContext", + "import org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD", + "import kotlinx.coroutines.runBlocking", + "import org.junit.jupiter.api.AfterEach", + "import org.junit.jupiter.api.BeforeEach", + "import eu.corentic.springrag.model.graph.TableElement", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.springframework.context.annotation.Import" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/system", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"setupTestCollection\"? \"runBlocking\"? \"listOf\"?+ (\"VectorChunk\" | \"mapOf\")?+ \"addChunks\"?+ \"searchSimilar\"?+ (\"any\" | \"asJobId\" | \"assertEquals\" | \"assertTrue\" | \"contains\" | \"deleteByJobId\" | \"fetchByJobId\" | \"isNotEmpty\" | \"metadata\" | \"single\" | \"size\" | \"text\")?+ \"isEmpty\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.config.BaseSystemTest", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.repository.VectorRepository", + "import kotlinx.coroutines.runBlocking", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.test.annotation.DirtiesContext", + "import org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_CLASS" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/config", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"IllegalStateException\" | \"`when`\" | \"anyString\" | \"assertThrows\" | \"atLeastOnce\" | \"contains\" | \"java\" | \"neo4jSchemaInitializer\" | \"run\" | \"session\" | \"thenReturn\" | \"thenThrow\" | \"times\" | \"verify\")?+ \"mockk\"? \"close\"?+ \"Driver\"? \"Neo4jConfig\"? \"transactionManager\"?+ \"assertTrue\"? \"Neo4jTransactionManager\"?", + "mdl_score": 13300, + "imports": [ + "import io.mockk.mockk", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.neo4j.driver.Driver", + "import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import org.mockito.ArgumentMatchers.anyString", + "import org.mockito.ArgumentMatchers.contains", + "import org.mockito.Mockito.mock", + "import org.mockito.Mockito.times", + "import org.mockito.Mockito.atLeastOnce", + "import org.mockito.Mockito.verify", + "import org.mockito.Mockito.`when`", + "import org.neo4j.driver.Result", + "import org.neo4j.driver.Session" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/health", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= (\"HealthCheckReply\" | \"`when`\" | \"collectionExistsAsync\" | \"getDefaultInstance\" | \"healthCheckAsync\" | \"immediateFuture\" | \"thenReturn\" | \"verifyConnectivityAsync\")?+ \"completedFuture\"?+ \"failedFuture\"?+ \"immediateFailedFuture\"?+ \"IllegalStateException\"? (\"InterruptedException\" | \"TimeoutException\")? (\"Neo4jDriverHealthIndicator\" | \"QdrantVectorStoreHealthIndicator\" | \"assertEquals\" | \"assertTrue\" | \"block\" | \"code\" | \"currentThread\" | \"health\" | \"interrupted\" | \"isInterrupted\" | \"requireNotNull\" | \"status\")?+", + "mdl_score": 0, + "imports": [ + "import java.util.concurrent.CompletableFuture", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import org.mockito.Mockito.mock", + "import org.neo4j.driver.Driver", + "import org.mockito.Mockito.`when`", + "import com.google.common.util.concurrent.Futures", + "import io.qdrant.client.QdrantClient", + "import io.qdrant.client.grpc.QdrantOuterClass", + "import java.util.concurrent.TimeoutException", + "import kotlin.test.assertEquals", + "import kotlin.test.assertTrue" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/model/graph", + "method_count": 7, + "algorithm": "CRX", + "grammar": "root ::= \"assertEquals\"?+ \"ImageData\"? \"hashCode\"?+ \"copy\"?+ \"assertNotEquals\"?", + "mdl_score": 21, + "imports": [ + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotEquals", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNotEquals" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/repository", + "method_count": 19, + "algorithm": "CRX", + "grammar": "root ::= \"assertEquals\"? \"every\"? \"listOf\"?+ \"map\"?+ \"text\"? \"verify\"? \"delete\"?+ \"similaritySearch\"?+ \"any\"? \"match\"? \"String\"?+ \"SearchRequest\"? (\"contains\" | \"filterExpression\" | \"toString\")?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.testsupport.NoOpCircuitBreakerFactory", + "import io.mockk.every", + "import io.mockk.just", + "import io.mockk.mockk", + "import io.mockk.runs", + "import io.mockk.verify", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.springframework.ai.document.Document", + "import org.springframework.ai.vectorstore.SearchRequest", + "import org.springframework.ai.vectorstore.VectorStore", + "import kotlin.test.assertEquals", + "import kotlin.test.assertTrue" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/cleanup", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= (\"DocumentDeletionRequested\" | \"KnowledgeBaseDeletionRequested\" | \"asJobId\" | \"asKnowledgeBaseId\" | \"deleteByJobId\" | \"deleteByKnowledgeBaseId\" | \"every\" | \"onDocumentDeletionRequested\" | \"onKnowledgeBaseDeletionRequested\" | \"verify\")+", + "mdl_score": 388660, + "imports": [ + "import eu.corentic.springrag.model.event.DocumentDeletionRequested", + "import eu.corentic.springrag.service.graph.GraphIngestionOrchestrator", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import io.mockk.every", + "import io.mockk.just", + "import io.mockk.mockk", + "import io.mockk.runs", + "import io.mockk.verify", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.model.event.KnowledgeBaseDeletionRequested", + "import eu.corentic.springrag.repository.VectorRepository" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/graph", + "method_count": 30, + "algorithm": "CRX", + "grammar": "root ::= \"asJobId\"?+ \"asDocumentId\"?+ \"every\"? \"asLogicalDocumentId\"?+ \"findOrCreateInactive\"?+ \"asFilename\"?+ \"any\"?+ \"stubDocumentGraphJob\"?", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.model.DocumentGraphJob", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.GraphImagePayload", + "import eu.corentic.springrag.model.GraphPage", + "import eu.corentic.springrag.model.GraphPictureElement", + "import eu.corentic.springrag.model.GraphTableElement", + "import eu.corentic.springrag.model.GraphTextElement", + "import eu.corentic.springrag.service.port.DocumentGraphJobPort", + "import eu.corentic.springrag.service.port.KnowledgeBasePort", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import eu.corentic.springrag.testsupport.NoOpCircuitBreakerFactory", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import io.mockk.*", + "import io.mockk.impl.annotations.MockK", + "import io.mockk.junit5.MockKExtension", + "import org.junit.jupiter.api.Assertions.*", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.extension.ExtendWith" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/port/adapter", + "method_count": 28, + "imports": [ + "import eu.corentic.springrag.model.graph.ImageData", + "import eu.corentic.springrag.model.graph.TableElement", + "import eu.corentic.springrag.model.graph.TextElement", + "import eu.corentic.springrag.repository.graph.ImageDataRepository", + "import eu.corentic.springrag.repository.graph.TableElementRepository", + "import eu.corentic.springrag.repository.graph.TextElementRepository", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.verify", + "import java.util.Optional", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNull", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.model.DocumentGraphJob", + "import eu.corentic.springrag.model.graph.DocumentJobNode", + "import eu.corentic.springrag.model.graph.KnowledgeBaseNode", + "import eu.corentic.springrag.repository.graph.DocumentJobNodeRepository", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import java.time.Instant", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import eu.corentic.springrag.repository.graph.GraphMaintenanceRepository", + "import io.mockk.just", + "import io.mockk.runs", + "import eu.corentic.springrag.model.KnowledgeBase", + "import eu.corentic.springrag.repository.graph.KnowledgeBaseRepository", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.repository.VectorRepository" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/storage", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"assertNull\"? \"parseS3Location\"? \"error\"?+ (\"assertEquals\" | \"bucket\")?+ \"key\"?", + "mdl_score": 182, + "imports": [ + "import kotlin.test.Test", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNull" + ], + "arg_patterns": {} + }, + { + "label": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/testsupport", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"Any\" | \"Builder\" | \"get\")+", + "mdl_score": 15, + "imports": [ + "import java.util.function.Function", + "import java.util.function.Supplier", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreaker", + "import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory", + "import org.springframework.cloud.client.circuitbreaker.ConfigBuilder" + ], + "arg_patterns": {} + }, + { + "label": "modules/chat/src/integrationTest/kotlin/eu/corentic/springrag/service/chat", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"runBlocking\"? \"ChatService\"? \"mockk\"? \"ChatResponse\"? \"every\"? \"listCapabilities\"? \"defaultAgentId\"? \"emptyList\"?+ \"RagInvocation\"? \"RagRequest\"? \"of\"?+ \"http\"?+ \"coEvery\"? (\"answer\" | \"assertEquals\" | \"chatWithSources\" | \"coVerify\" | \"invoke\")?+", + "mdl_score": 95, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDirectory", + "import eu.corentic.springrag.agent.rag.RagAgentInvocationGateway", + "import org.springframework.boot.SpringBootConfiguration", + "import org.springframework.boot.autoconfigure.EnableAutoConfiguration", + "import org.springframework.context.annotation.Bean", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.rag.RagInvocation", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.model.ChatResponse", + "import io.mockk.every", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import io.mockk.mockk", + "import kotlinx.coroutines.runBlocking", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.boot.test.context.TestConfiguration", + "import org.springframework.test.context.ActiveProfiles" + ], + "arg_patterns": {} + }, + { + "label": "modules/chat/src/main/kotlin/eu/corentic/springrag/service/chat", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"let\"?+ \"info\"?+ \"KnowledgeBaseId\"? \"defaultAgentId\"?+ (\"RagInvocation\" | \"RagRequest\" | \"invoke\" | \"return ragAgentInvocationGateway.invoke(\n RagInvocation(\n request = request,\n executionContext = AgentExecutionContext.http()\n )\n )\" | \"return ragAgentInvocationGateway.invoke(\n RagInvocation(\n request = request,\n executionContext = AgentExecutionContext.http(contextId = conversationId)\n )\n )\")?+ \"listCapabilities\"?+ \"http\"?+ \"filter\"?+ \"map\"?+ \"AgentCapabilityDescriptor\"? \"id\"?", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDirectory", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.capability.isExposedOverHttp", + "import eu.corentic.springrag.agent.rag.RagAgentInvocationGateway", + "import eu.corentic.springrag.agent.rag.RagInvocation", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.model.ChatResponse", + "import jakarta.annotation.PostConstruct", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.stereotype.Service" + ], + "arg_patterns": {} + }, + { + "label": "modules/chat/src/systemTest/kotlin/eu/corentic/springrag/config", + "method_count": 15, + "imports": [ + "import eu.corentic.springrag.testcontainers.OllamaModelSupport", + "import eu.corentic.springrag.testcontainers.QdrantTestSupport", + "import eu.corentic.springrag.testcontainers.QdrantTestSupport.recreateTestCollection", + "import eu.corentic.springrag.testcontainers.SharedContainers", + "import eu.corentic.springrag.testcontainers.SharedContainers.ContainerType", + "import io.qdrant.client.QdrantClient", + "import java.time.Duration", + "import java.time.Instant", + "import java.util.UUID", + "import org.junit.jupiter.api.Assumptions", + "import org.junit.jupiter.api.BeforeAll", + "import org.junit.jupiter.api.BeforeEach", + "import org.neo4j.driver.Driver", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient", + "import org.springframework.jdbc.core.JdbcTemplate", + "import org.springframework.security.crypto.password.PasswordEncoder", + "import org.springframework.test.context.ActiveProfiles", + "import org.springframework.test.context.DynamicPropertyRegistry", + "import org.springframework.test.context.DynamicPropertySource", + "import org.springframework.test.context.TestPropertySource", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import org.testcontainers.junit.jupiter.Testcontainers", + "import java.sql.Timestamp", + "import org.springframework.ai.chat.memory.ChatMemory", + "import org.springframework.ai.chat.memory.ChatMemoryRepository", + "import org.springframework.ai.chat.memory.MessageWindowChatMemory", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import org.springframework.boot.SpringBootConfiguration", + "import org.springframework.boot.autoconfigure.EnableAutoConfiguration", + "import org.springframework.boot.context.properties.ConfigurationPropertiesScan", + "import org.springframework.context.annotation.ComponentScan", + "import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories", + "import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories", + "import org.springframework.jdbc.datasource.DataSourceTransactionManager", + "import org.springframework.transaction.PlatformTransactionManager", + "import javax.sql.DataSource", + "import ai.docling.serve.api.DoclingServeApi", + "import ai.docling.serve.client.DoclingServeClientBuilderFactory", + "import java.lang.reflect.InvocationTargetException" + ], + "arg_patterns": {} + }, + { + "label": "modules/chat/src/systemTest/kotlin/eu/corentic/springrag/system", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"runBlocking\"? \"setupTestCollection\"? \"addChunks\"?+ \"listOf\"?+ \"VectorChunk\"? \"mapOf\"?+ (\"ChatResponse\" | \"SessionChatRequest\" | \"String\" | \"adminClient\" | \"answer\" | \"any\" | \"assertEquals\" | \"assertNotNull\" | \"assertTrue\" | \"atMost\" | \"await\" | \"blockFirst\" | \"bodyValue\" | \"contains\" | \"conversationId\" | \"exchange\" | \"expectBody\" | \"expectStatus\" | \"get\" | \"isEqualTo\" | \"isNotBlank\" | \"isOk\" | \"jsonPath\" | \"lowercase\" | \"ofSeconds\" | \"post\" | \"responseBody\" | \"returnResult\" | \"text\" | \"untilAsserted\" | \"uri\" | \"value\")?+ \"isEmpty\"?", + "mdl_score": 3008, + "imports": [ + "import eu.corentic.springrag.config.BaseSystemTest", + "import eu.corentic.springrag.controller.SessionChatRequest", + "import eu.corentic.springrag.model.ChatResponse", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.repository.VectorRepository", + "import java.time.Duration", + "import kotlinx.coroutines.runBlocking", + "import org.awaitility.Awaitility.await", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.springframework.ai.chat.memory.ChatMemory", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient", + "import org.springframework.test.web.reactive.server.WebTestClient", + "import org.springframework.test.web.reactive.server.returnResult" + ], + "arg_patterns": {} + }, + { + "label": "modules/chat/src/test/kotlin/eu/corentic/springrag/service/chat", + "method_count": 8, + "algorithm": "CRX", + "grammar": "root ::= \"assertEquals\"? \"runTest\"? \"answer\"? \"coVerify\"? (\"ChatResponse\" | \"RagInvocation\" | \"RagRequest\" | \"asKnowledgeBaseId\" | \"coEvery\" | \"defaultAgentId\" | \"emptyList\" | \"every\" | \"http\" | \"invoke\" | \"listCapabilities\")?+ \"ChatService\"?", + "mdl_score": 639936, + "imports": [ + "import eu.corentic.springrag.agent.capability.AgentCapabilityDirectory", + "import eu.corentic.springrag.agent.capability.AgentExecutionContext", + "import eu.corentic.springrag.agent.rag.RagAgentInvocationGateway", + "import eu.corentic.springrag.agent.rag.RagInvocation", + "import eu.corentic.springrag.agent.rag.RagRequest", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.model.ChatResponse", + "import io.mockk.coEvery", + "import io.mockk.coVerify", + "import io.mockk.every", + "import io.mockk.mockk", + "import kotlinx.coroutines.test.StandardTestDispatcher", + "import kotlinx.coroutines.test.runTest", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.agent.capability.AgentCapabilityDescriptor", + "import org.junit.jupiter.api.BeforeEach" + ], + "arg_patterns": {} + }, + { + "label": "modules/common/src/main/kotlin/eu/corentic/springrag/common", + "method_count": 7, + "algorithm": "CRX", + "grammar": "root ::= \"when\" \"Ok\"? \"Err\"?", + "mdl_score": 4, + "imports": [], + "arg_patterns": {} + }, + { + "label": "modules/common/src/main/kotlin/eu/corentic/springrag/common/ids", + "method_count": 18, + "imports": [], + "arg_patterns": {} + }, + { + "label": "modules/common/src/test/kotlin/eu/corentic/springrag/common/ids", + "method_count": 8, + "algorithm": "CRX", + "grammar": "root ::= \"assertEquals\"? (\"IllegalArgumentException\" | \"assertFailsWith\" | \"of\" | \"value\")?+", + "mdl_score": 2768, + "imports": [ + "import kotlin.test.Test", + "import kotlin.test.assertEquals", + "import kotlin.test.assertFailsWith" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/integrationTest/kotlin/eu/corentic/springrag/service/job", + "method_count": 34, + "imports": [ + "import com.ninjasquad.springmockk.MockkBean", + "import eu.corentic.springrag.batch.DocumentIngestionJobConfig", + "import eu.corentic.springrag.batch.model.DocumentInput", + "import eu.corentic.springrag.batch.model.ProcessedDocument", + "import eu.corentic.springrag.batch.processor.DocumentProcessingItemProcessor", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.service.port.DocumentParserPort", + "import eu.corentic.springrag.service.port.ChunkIndexPort", + "import eu.corentic.springrag.service.port.GraphIndexPort", + "import io.mockk.clearMocks", + "import io.mockk.every", + "import java.io.File", + "import java.time.Duration", + "import org.awaitility.Awaitility.await", + "import org.junit.jupiter.api.Assertions", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.AfterEach", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.beans.factory.annotation.Autowired", + "import org.springframework.boot.test.context.SpringBootTest", + "import org.springframework.test.context.ActiveProfiles", + "import eu.corentic.springrag.batch.model.ProcessingError", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import org.springframework.jdbc.core.JdbcTemplate", + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import eu.corentic.springrag.batch.listener.BatchJobListener", + "import eu.corentic.springrag.batch.listener.SimpleDocumentTrackingListener", + "import eu.corentic.springrag.batch.partition.DocumentPartitioner", + "import eu.corentic.springrag.batch.reader.FileBasedDocumentItemReader", + "import eu.corentic.springrag.batch.writer.GraphStoreItemWriter", + "import java.nio.file.Files", + "import java.util.concurrent.CountDownLatch", + "import java.util.concurrent.TimeUnit", + "import java.util.concurrent.atomic.AtomicLong", + "import org.springframework.batch.core.job.Job", + "import org.springframework.batch.core.job.JobExecution", + "import org.springframework.batch.core.job.JobInstance", + "import org.springframework.batch.core.job.parameters.JobParameters", + "import org.springframework.batch.core.launch.JobOperator", + "import org.junit.jupiter.api.Assertions.assertNull", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import java.util.concurrent.ConcurrentHashMap", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import org.springframework.context.annotation.Profile" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch", + "method_count": 16, + "imports": [ + "import eu.corentic.springrag.batch.listener.BatchJobListener", + "import eu.corentic.springrag.batch.listener.DocumentActivationWriteListener", + "import eu.corentic.springrag.batch.listener.DocumentIngestionStageWriteListener", + "import eu.corentic.springrag.batch.listener.SimpleDocumentTrackingListener", + "import eu.corentic.springrag.batch.model.DocumentInput", + "import eu.corentic.springrag.batch.model.ProcessedDocument", + "import eu.corentic.springrag.batch.partition.DocumentPartitioner", + "import eu.corentic.springrag.batch.processor.DocumentProcessingItemProcessor", + "import eu.corentic.springrag.batch.reader.FileBasedDocumentItemReader", + "import eu.corentic.springrag.batch.writer.DocumentActivationWriter", + "import eu.corentic.springrag.batch.writer.DocumentIngestionStageWriter", + "import eu.corentic.springrag.service.job.IngestionDocumentState", + "import eu.corentic.springrag.service.job.IngestionDocumentStateRepository", + "import eu.corentic.springrag.config.BatchProperties", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import javax.sql.DataSource", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.batch.core.configuration.annotation.StepScope", + "import org.springframework.batch.core.job.Job", + "import org.springframework.batch.core.job.builder.JobBuilder", + "import org.springframework.batch.core.repository.JobRepository", + "import org.springframework.batch.core.partition.PartitionHandler", + "import org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler", + "import org.springframework.batch.core.step.Step", + "import org.springframework.batch.core.step.builder.StepBuilder", + "import org.springframework.batch.core.step.skip.SkipPolicy", + "import org.springframework.batch.core.listener.SkipListener", + "import org.springframework.batch.infrastructure.item.database.JdbcCursorItemReader", + "import org.springframework.batch.infrastructure.item.database.builder.JdbcCursorItemReaderBuilder", + "import org.springframework.beans.factory.annotation.Qualifier", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import org.springframework.core.task.TaskExecutor", + "import org.springframework.core.retry.RetryPolicy", + "import org.springframework.dao.TransientDataAccessException", + "import org.springframework.transaction.PlatformTransactionManager", + "import org.springframework.util.backoff.FixedBackOff", + "import java.io.IOException", + "import eu.corentic.springrag.service.chunk.DocumentChunkService", + "import eu.corentic.springrag.service.port.DocumentParserPort", + "import eu.corentic.springrag.service.port.DocumentParsingRequest", + "import org.springframework.batch.infrastructure.item.ItemProcessor", + "import org.springframework.stereotype.Component" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/listener", + "method_count": 16, + "algorithm": "CRX", + "grammar": "root ::= (\"filename\" | \"jobId\" | \"recordFailure\")?+ \"forEach\"?+ \"markFailed\"?+ \"documentId\"?", + "mdl_score": 93, + "imports": [ + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.batch.core.BatchStatus", + "import org.springframework.batch.core.job.JobExecution", + "import org.springframework.batch.core.listener.JobExecutionListener", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.service.job.StagedUploadCleanupService", + "import eu.corentic.springrag.service.job.DocumentTrackingRepository", + "import eu.corentic.springrag.service.job.IngestionDocumentState", + "import eu.corentic.springrag.service.job.IngestionDocumentStateRepository", + "import org.springframework.batch.core.listener.ItemWriteListener", + "import org.springframework.batch.core.listener.SkipListener", + "import org.springframework.batch.infrastructure.item.Chunk", + "import eu.corentic.springrag.batch.model.ProcessedDocument", + "import eu.corentic.springrag.batch.model.ProcessingError", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.batch.model.DocumentInput", + "import org.springframework.batch.core.listener.ItemProcessListener" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/model", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= (\"DocumentInput\" | \"content\" | \"contentEquals\" | \"documentId\" | \"fileStorageUri\" | \"filename\" | \"if\" | \"javaClass\" | \"jobId\" | \"knowledgeBaseId\" | \"logicalDocumentId\" | \"return false\" | \"return true\" | \"submittedBy\")?+ \"entries\"? (\"contentHashCode\" | \"hashCode\")?+ \"filter\"?+ \"return result\"? (\"key\" | \"startsWith\")?+ \"endsWith\"?+ \"mapNotNull\"?+ \"value\"? (\"Boolean\" | \"DocumentParsingError\" | \"ERROR\" | \"GenericError\" | \"Int\" | \"Long\" | \"NetworkTimeoutError\" | \"String\" | \"ValidationError\" | \"WARNING\" | \"else\" | \"let\" | \"return when (errorType) {\n \\\"DocumentParsingError\\\" -> ProcessingError.DocumentParsingError(\n filename = this[\\\"document.doc${index}.error.filename\\\"] as? String ?: \\\"unknown\\\",\n line = this[\\\"document.doc${index}.error.line\\\"] as? Int,\n message = message ?: \\\"Unknown parsing error\\\",\n retryable = retryable,\n severity = severity?.let { ErrorSeverity.valueOf(it) } ?: ErrorSeverity.ERROR\n )\n \\\"NetworkTimeoutError\\\" -> ProcessingError.NetworkTimeoutError(\n timeoutMs = this[\\\"document.doc${index}.error.timeoutMs\\\"] as? Long ?: 30000,\n message = message ?: \\\"Unknown timeout error\\\",\n retryable = retryable,\n severity = severity?.let { ErrorSeverity.valueOf(it) } ?: ErrorSeverity.WARNING\n )\n \\\"ValidationError\\\" -> ProcessingError.ValidationError(\n field = this[\\\"document.doc${index}.error.field\\\"] as? String ?: \\\"unknown\\\",\n value = this[\\\"document.doc${index}.error.value\\\"] as? String ?: \\\"unknown\\\",\n message = message ?: \\\"Unknown validation error\\\",\n retryable = retryable,\n severity = severity?.let { ErrorSeverity.valueOf(it) } ?: ErrorSeverity.ERROR\n )\n else -> ProcessingError.GenericError(\n exceptionType = errorType ?: \\\"UnknownError\\\",\n message = message ?: \\\"Unknown error\\\",\n retryable = retryable,\n severity = severity?.let { ErrorSeverity.valueOf(it) } ?: ErrorSeverity.ERROR\n )\n }\" | \"valueOf\" | \"when\")?+ \"return ErrorSummary(\n totalErrors = errors.size,\n retryableErrors = errors.count { it.contains(\\\"timeout\\\") || it.contains(\\\"retryable\\\") },\n firstError = errors.firstOrNull()\n )\"? \"ErrorSummary\"? \"size\"? \"count\"?+ \"contains\"?+ \"firstOrNull\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.VectorChunk", + "import java.time.Instant" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/partition", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"values\"? \"mutableMapOf\"?+ \"firstOrNull\"?+ \"getString\"?+ (\"Exception\" | \"ExecutionContext\" | \"Filename\" | \"IllegalStateException\" | \"List\" | \"String\" | \"UUID\" | \"appendPath\" | \"catch\" | \"compareTo\" | \"createEmptyPartitions\" | \"else\" | \"error\" | \"exists\" | \"fileName\" | \"filenameFromUri\" | \"filter\" | \"for\" | \"forEachIndexed\" | \"getDefault\" | \"getPathMatcher\" | \"if\" | \"info\" | \"isDirectory\" | \"isEmpty\" | \"isNotEmpty\" | \"isObjectStorageUri\" | \"isRegularFile\" | \"list\" | \"listObjects\" | \"listOf\" | \"listTrackedFilenames\" | \"logPartitioningInfo\" | \"map\" | \"mapNotNull\" | \"matches\" | \"message\" | \"of\" | \"put\" | \"putInt\" | \"putString\" | \"queueDocuments\" | \"randomUUID\" | \"removeSuffix\" | \"resolveFiles\" | \"resolvePath\" | \"return Files.list(rootPath).use { stream ->\n stream\n .filter { Files.isRegularFile(it) }\n .filter { matcher.matches(it.fileName) }\n .filter { Files.size(it) > 0L }\n .sorted { a, b -> a.fileName.toString().compareTo(b.fileName.toString()) }\n .toList()\n }\" | \"return createEmptyPartitions(gridSize, \\\"ERROR: No inputPath provided\\\")\" | \"return partitions\" | \"size\" | \"sorted\" | \"throw\" | \"throw IllegalStateException(\\\"Input path does not exist: $rootPath\\\")\" | \"throw IllegalStateException(\\\"Input path is not a directory: $rootPath\\\")\" | \"throw IllegalStateException(\\\"Invalid inputPath: $normalizedInputPath\\\")\" | \"toString\" | \"toUri\" | \"try\" | \"use\" | \"util\" | \"value\" | \"warn\")?+ \"toList\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.service.job.DocumentTrackingRepository", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import java.nio.file.FileSystems", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import kotlin.streams.toList", + "import org.springframework.batch.core.configuration.annotation.StepScope", + "import org.springframework.batch.core.partition.Partitioner", + "import org.springframework.batch.infrastructure.item.ExecutionContext", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.stereotype.Component" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/reader", + "method_count": 4, + "algorithm": "CRX", + "grammar": "root ::= \"poll\"?+ (\"DocumentInput\" | \"IllegalStateException\" | \"KnowledgeBaseId\" | \"List\" | \"String\" | \"containsKey\" | \"debug\" | \"documentVersionId\" | \"else\" | \"error\" | \"exists\" | \"filenameFromUri\" | \"forEach\" | \"get\" | \"getResource\" | \"identityHashCode\" | \"if\" | \"info\" | \"inputStream\" | \"isNotEmpty\" | \"isObjectStorageUri\" | \"isReadable\" | \"it\" | \"java\" | \"let\" | \"loadObject\" | \"logicalDocumentId\" | \"mapNotNull\" | \"name\" | \"objectExists\" | \"of\" | \"offer\" | \"partitionedFiles\" | \"readBytes\" | \"requireNotNull\" | \"return\" | \"return DocumentInput(\n jobId = resolvedJobId,\n documentId = documentId,\n logicalDocumentId = logicalDocumentId,\n filename = resolvedFilename,\n content = content,\n fileStorageUri = StorageUri.of(uri),\n knowledgeBaseId = resolvedKnowledgeBaseId,\n submittedBy = submittedBy\n )\" | \"return null\" | \"size\" | \"throw\" | \"throw IllegalStateException(\\\"Object not found at $uri\\\")\" | \"throw IllegalStateException(\\\"Resource not readable: $uri\\\")\" | \"use\" | \"value\" | \"warn\" | \"when\")?+ (\"clear\" | \"initialize\")?+", + "mdl_score": 532496, + "imports": [ + "import eu.corentic.springrag.batch.model.DocumentInput", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.service.document.DocumentIdentity", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.batch.infrastructure.item.ExecutionContext", + "import org.springframework.batch.infrastructure.item.ItemStreamReader", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.core.io.ResourceLoader", + "import java.util.concurrent.ConcurrentLinkedQueue" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/writer", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= \"items\"? \"forEach\"?+ (\"addChunks\" | \"chunks\" | \"content\" | \"debug\" | \"documentId\" | \"else\" | \"enforce\" | \"fileStorageUri\" | \"filename\" | \"graphDocument\" | \"if\" | \"input\" | \"isEmpty\" | \"jobId\" | \"knowledgeBaseId\" | \"let\" | \"logicalDocumentId\" | \"pictures\" | \"size\" | \"stageDocumentGraph\" | \"submittedBy\" | \"tables\" | \"texts\" | \"toLong\" | \"upsertStaging\" | \"value\" | \"warn\")?+ \"activate\"?+", + "mdl_score": 71388, + "imports": [ + "import eu.corentic.springrag.service.job.DocumentActivationService", + "import eu.corentic.springrag.service.job.IngestionDocumentState", + "import org.springframework.batch.infrastructure.item.Chunk", + "import org.springframework.batch.infrastructure.item.ItemWriter", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.batch.model.ProcessedDocument", + "import eu.corentic.springrag.service.chunk.EmbeddingInputGuard", + "import eu.corentic.springrag.service.job.IngestionDocumentStateRepository", + "import eu.corentic.springrag.service.port.ChunkIndexPort", + "import eu.corentic.springrag.service.port.GraphIndexPort", + "import io.github.oshai.kotlinlogging.KotlinLogging" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/config", + "method_count": 26, + "imports": [ + "import javax.sql.DataSource", + "import org.springframework.batch.core.configuration.support.JdbcDefaultBatchConfiguration", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import org.springframework.core.task.TaskDecorator", + "import org.springframework.core.task.TaskExecutor", + "import org.springframework.core.task.VirtualThreadTaskExecutor", + "import org.springframework.core.task.support.TaskExecutorAdapter", + "import org.springframework.jdbc.datasource.DataSourceTransactionManager", + "import org.springframework.transaction.PlatformTransactionManager", + "import org.springframework.transaction.annotation.Isolation", + "import eu.corentic.springrag.common.ids.BatchId", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.StorageUri", + "import jakarta.annotation.PostConstruct", + "import jakarta.validation.constraints.NotBlank", + "import java.net.URI", + "import java.nio.file.Path", + "import java.time.Duration", + "import org.slf4j.LoggerFactory", + "import org.springframework.boot.context.properties.ConfigurationProperties", + "import org.springframework.validation.annotation.Validated" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/chunk", + "method_count": 18, + "algorithm": "CRX", + "grammar": "root ::= \"trim\"?+ \"if\" \"isBlank\"?+", + "mdl_score": 4, + "imports": [ + "import eu.corentic.springrag.config.HybridChunkingConfig", + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.GraphTableElement", + "import eu.corentic.springrag.model.GraphTextElement", + "import eu.corentic.springrag.model.ParsedDocument", + "import eu.corentic.springrag.model.VectorChunk", + "import org.springframework.stereotype.Service", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.config.EmbabelModelProperties", + "import kotlin.math.min", + "import com.knuddels.jtokkit.Encodings", + "import com.knuddels.jtokkit.api.Encoding", + "import com.knuddels.jtokkit.api.EncodingType" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/document", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"lowercase\" | \"trim\" | \"value\")?+ \"joinToString\"? \"getInstance\"?+ \"format\"?+ \"digest\"?+ \"toByteArray\"?+ \"toHex\"?+ (\"return DocumentId.of(\\\"doc-$hex\\\")\" | \"return LogicalDocumentId.of(\\\"ldoc-$hex\\\")\")? \"of\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import java.security.MessageDigest" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/job", + "method_count": 62, + "imports": [ + "import java.sql.Timestamp", + "import java.time.Instant", + "import org.springframework.jdbc.core.JdbcTemplate", + "import org.springframework.stereotype.Component", + "from ingestion_batch_ownership", + "import eu.corentic.springrag.common.DomainException", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.stereotype.Service", + "import eu.corentic.springrag.model.event.DocumentActivationFailed", + "import eu.corentic.springrag.service.port.ChunkIndexPort", + "import org.springframework.modulith.events.ApplicationModuleListener", + "import eu.corentic.springrag.service.port.GraphIndexPort", + "import org.springframework.context.ApplicationEventPublisher", + "import eu.corentic.springrag.model.event.DocumentDeletionRequested", + "import eu.corentic.springrag.batch.model.ErrorSeverity", + "import eu.corentic.springrag.batch.model.ProcessingError", + "import eu.corentic.springrag.common.ids.Filename", + "import eu.corentic.springrag.common.ids.JobId", + "import java.sql.ResultSet", + "import org.springframework.transaction.annotation.Transactional", + "from ingestion_document_tracking", + "import eu.corentic.springrag.common.ids.DocumentId", + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.common.ids.LogicalDocumentId", + "import org.springframework.jdbc.core.RowMapper", + "from ingestion_document_state", + "import org.springframework.batch.core.job.JobExecution", + "import org.springframework.batch.core.job.JobInstance", + "import org.springframework.batch.core.repository.JobRepository", + "import eu.corentic.springrag.common.ids.StorageUri", + "import eu.corentic.springrag.config.StorageProperties", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import org.springframework.core.io.ResourceLoader", + "import org.springframework.batch.core.job.Job", + "import org.springframework.batch.core.job.parameters.JobParameters", + "import org.springframework.batch.core.launch.JobOperator", + "import java.util.UUID", + "import org.springframework.batch.core.job.parameters.JobParametersBuilder", + "import java.io.File", + "import java.util.*", + "import org.springframework.batch.core.launch.JobExecutionAlreadyRunningException", + "import org.springframework.batch.core.launch.JobInstanceAlreadyCompleteException", + "import eu.corentic.springrag.batch.DocumentIngestionJobConfig", + "import org.springframework.batch.core.launch.NoSuchJobException", + "import eu.corentic.springrag.batch.model.ErrorSummary", + "import org.springframework.batch.core.BatchStatus", + "import eu.corentic.springrag.model.event.KnowledgeBaseDeletionRequested", + "import java.net.URI", + "import java.nio.file.Path", + "import org.springframework.scheduling.annotation.Scheduled", + "import org.springframework.util.FileSystemUtils" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch", + "method_count": 17, + "imports": [ + "import eu.corentic.springrag.config.BatchProperties", + "import eu.corentic.springrag.service.job.IngestionDocumentStateRepository", + "import io.mockk.mockk", + "import kotlin.test.assertEquals", + "import org.junit.jupiter.api.Test", + "import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder", + "import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType", + "import java.io.IOException", + "import kotlin.test.assertFalse", + "import kotlin.test.assertTrue", + "import org.springframework.core.retry.RetryPolicy", + "import org.springframework.dao.TransientDataAccessResourceException", + "import org.springframework.util.backoff.FixedBackOff", + "import org.springframework.batch.core.step.skip.SkipPolicy", + "import kotlin.test.assertNotNull", + "import org.springframework.batch.core.listener.ItemProcessListener", + "import org.springframework.batch.core.listener.JobExecutionListener" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/listener", + "method_count": 34, + "imports": [ + "import eu.corentic.springrag.config.StorageProperties", + "import java.io.IOException", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import java.time.Duration", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.io.TempDir", + "import org.springframework.batch.core.BatchStatus", + "import org.springframework.batch.core.job.JobExecution", + "import org.springframework.batch.core.job.JobInstance", + "import org.springframework.batch.core.job.parameters.JobParameters", + "import org.springframework.batch.core.job.parameters.JobParametersBuilder", + "import org.springframework.batch.test.MetaDataInstanceFactory", + "import eu.corentic.springrag.service.job.StagedUploadCleanupService", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import io.mockk.mockk", + "import eu.corentic.springrag.service.job.DocumentTrackingRepository", + "import eu.corentic.springrag.service.job.IngestionDocumentState", + "import eu.corentic.springrag.service.job.IngestionDocumentStateRepository", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import io.mockk.every", + "import io.mockk.just", + "import io.mockk.runs", + "import io.mockk.verify", + "import org.springframework.batch.infrastructure.item.Chunk", + "import eu.corentic.springrag.batch.model.DocumentInput", + "import eu.corentic.springrag.batch.model.ProcessedDocument", + "import eu.corentic.springrag.batch.model.ProcessingError", + "import java.io.EOFException", + "import java.net.SocketTimeoutException", + "import javax.net.ssl.SSLException", + "import kotlin.test.assertEquals", + "import eu.corentic.springrag.model.VectorChunk", + "import io.mockk.slot" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/model", + "method_count": 8, + "algorithm": "CRX", + "grammar": "root ::= \"mapOf\"?+ \"DocumentInput\"? (\"assertNotEquals\" | \"severity\")? \"String\"?+ \"asJobId\"?+ \"Any\"? \"asDocumentId\"?+ \"requireNotNull\"?+ \"asLogicalDocumentId\"?+ \"getDocumentError\"?+ \"asFilename\"?+ \"assertTrue\"? \"byteArrayOf\"?+ \"ProcessingError\"? \"asStorageUri\"?+ \"asKnowledgeBaseId\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotEquals", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertTrue" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/partition", + "method_count": 7, + "algorithm": "CRX", + "grammar": "root ::= (\"resolve\" | \"writeString\")?+ \"mockk\"? \"DocumentTrackingRepository\"? (\"any\" | \"asJobId\" | \"assertEquals\" | \"assertTrue\" | \"containsAll\" | \"emptyList\" | \"every\" | \"getString\" | \"listOf\" | \"listTrackedFilenames\" | \"map\" | \"match\" | \"partition\" | \"partitioner\" | \"queueDocuments\" | \"size\" | \"sorted\" | \"value\" | \"values\" | \"verify\")?+ \"all\"?+ \"error\"?+ \"getInt\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.service.job.DocumentTrackingRepository", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import io.mockk.every", + "import io.mockk.just", + "import io.mockk.mockk", + "import io.mockk.runs", + "import io.mockk.verify", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import kotlin.test.assertEquals", + "import kotlin.test.assertTrue", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.io.TempDir" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/processor", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"clearAllMocks\"? \"DocumentInput\"? (\"DocumentParsingRequest\" | \"GraphDocument\" | \"ParsedDocument\" | \"RuntimeException\" | \"VectorChunk\" | \"any\" | \"asDocumentId\" | \"asFilename\" | \"asJobId\" | \"asKnowledgeBaseId\" | \"asLogicalDocumentId\" | \"assertEquals\" | \"assertNotNull\" | \"assertThrows\" | \"byteArrayOf\" | \"content\" | \"createChunks\" | \"documentId\" | \"emptyList\" | \"every\" | \"filename\" | \"graphDocument\" | \"input\" | \"jobId\" | \"listOf\" | \"logicalDocumentId\" | \"parse\" | \"process\" | \"toList\" | \"verify\" | \"withArg\")?+ (\"chunks\" | \"knowledgeBaseId\")?", + "mdl_score": 86178481, + "imports": [ + "import eu.corentic.springrag.batch.model.DocumentInput", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.ParsedDocument", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.service.chunk.DocumentChunkService", + "import eu.corentic.springrag.service.port.DocumentParserPort", + "import eu.corentic.springrag.service.port.DocumentParsingRequest", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import io.mockk.clearAllMocks", + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.verify", + "import java.util.UUID", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotNull", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.assertThrows" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/reader", + "method_count": 12, + "algorithm": "CRX", + "grammar": "root ::= (\"DefaultResourceLoader\" | \"File\" | \"FileBasedDocumentItemReader\" | \"absolutePath\" | \"byteArrayOf\" | \"core\" | \"io\" | \"open\" | \"springframework\" | \"writeBytes\")?+ \"batch\"? \"infrastructure\"? \"item\"? \"ExecutionContext\"?+ \"read\"?+ \"assertNull\"? \"assertNotNull\"? \"assertEquals\"? \"filename\"? \"value\"?", + "mdl_score": 5820, + "imports": [ + "import eu.corentic.springrag.service.document.DocumentIdentity", + "import java.io.File", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import io.mockk.mockk", + "import org.junit.jupiter.api.Assertions.*", + "import org.junit.jupiter.api.Test", + "import org.junit.jupiter.api.io.TempDir" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/writer", + "method_count": 14, + "algorithm": "CRX", + "grammar": "root ::= \"write\"?+ \"ProcessedDocument\"? \"runTest\"? \"emptyList\"?+ \"coVerify\"? \"DocumentInput\"? \"Chunk\"? \"stageDocumentGraph\"?+ \"asJobId\"?+ \"listOf\"?+ \"any\"?+ \"asDocumentId\"?+ \"asLogicalDocumentId\"?+ \"asFilename\"?+ \"byteArrayOf\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.service.job.DocumentActivationService", + "import eu.corentic.springrag.service.job.IngestionDocumentState", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import io.mockk.every", + "import io.mockk.just", + "import io.mockk.mockk", + "import io.mockk.runs", + "import org.junit.jupiter.api.Test", + "import org.springframework.batch.infrastructure.item.Chunk", + "import kotlin.test.assertFailsWith", + "import eu.corentic.springrag.batch.model.DocumentInput", + "import eu.corentic.springrag.batch.model.ProcessedDocument", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.VectorChunk", + "import eu.corentic.springrag.service.chunk.EmbeddingInputGuard", + "import eu.corentic.springrag.service.chunk.EmbeddingInputTooLargeException", + "import eu.corentic.springrag.service.job.IngestionDocumentStateRepository", + "import eu.corentic.springrag.service.port.ChunkIndexPort", + "import eu.corentic.springrag.service.port.GraphIndexPort", + "import io.mockk.verify", + "import io.mockk.*", + "import io.mockk.impl.annotations.MockK", + "import io.mockk.junit5.MockKExtension", + "import kotlinx.coroutines.test.runTest", + "import org.junit.jupiter.api.AfterEach", + "import org.junit.jupiter.api.Assertions.*", + "import org.junit.jupiter.api.BeforeEach", + "import org.junit.jupiter.api.extension.ExtendWith" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/chunk", + "method_count": 8, + "algorithm": "CRX", + "grammar": "root ::= \"HybridChunkingConfig\"? \"service\"? \"GraphDocument\"? \"listOf\"?+ (\"GraphTableElement\" | \"GraphTextElement\")? \"createChunks\"?+ \"asJobId\"?+ \"asDocumentId\"?+ \"asLogicalDocumentId\"?+ \"asFilename\"?+ \"ParsedDocument\"? (\"assertEquals\" | \"size\")?+ \"assertTrue\"? \"all\"?+ \"metadata\"? \"Int\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.config.HybridChunkingConfig", + "import eu.corentic.springrag.config.EmbabelModelProperties", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import eu.corentic.springrag.model.GraphDocument", + "import eu.corentic.springrag.model.GraphTableElement", + "import eu.corentic.springrag.model.GraphTextElement", + "import eu.corentic.springrag.model.ParsedDocument", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotNull", + "import kotlin.test.assertTrue", + "import org.junit.jupiter.api.Test" + ], + "arg_patterns": {} + }, + { + "label": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/job", + "method_count": 49, + "imports": [ + "import io.mockk.every", + "import io.mockk.mockk", + "import io.mockk.verify", + "import kotlin.test.assertEquals", + "import kotlin.test.assertFailsWith", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.model.event.DocumentActivationFailed", + "import eu.corentic.springrag.service.port.ChunkIndexPort", + "import eu.corentic.springrag.common.ids.asDocumentId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import eu.corentic.springrag.common.ids.asLogicalDocumentId", + "import io.mockk.just", + "import io.mockk.runs", + "import eu.corentic.springrag.service.port.GraphIndexPort", + "import eu.corentic.springrag.common.ids.asFilename", + "import eu.corentic.springrag.common.ids.asJobId", + "import org.springframework.context.ApplicationEventPublisher", + "import eu.corentic.springrag.model.event.DocumentDeletionRequested", + "import java.time.LocalDateTime", + "import kotlin.test.assertNull", + "import org.springframework.batch.core.job.JobExecution", + "import org.springframework.batch.core.job.JobInstance", + "import org.springframework.batch.core.job.parameters.JobParametersBuilder", + "import org.springframework.batch.core.repository.JobRepository", + "import java.io.File", + "import eu.corentic.springrag.common.ids.asStorageUri", + "import eu.corentic.springrag.service.port.ObjectStoragePort", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import org.springframework.core.io.DefaultResourceLoader", + "import org.junit.jupiter.api.Assertions.assertNull", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertSame", + "import org.junit.jupiter.api.assertThrows", + "import org.slf4j.MDC", + "import org.springframework.batch.core.job.Job", + "import org.springframework.batch.core.launch.JobOperator", + "import kotlin.test.assertNotNull", + "import io.mockk.slot", + "import org.junit.jupiter.api.Assertions.assertNotEquals", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.springframework.batch.core.BatchStatus", + "import org.springframework.batch.core.launch.JobExecutionAlreadyRunningException", + "import org.springframework.batch.core.launch.JobInstanceAlreadyCompleteException", + "import org.springframework.batch.core.job.parameters.JobParameters", + "import org.springframework.batch.test.MetaDataInstanceFactory", + "import kotlin.test.assertTrue", + "import eu.corentic.springrag.model.event.KnowledgeBaseDeletionRequested", + "import eu.corentic.springrag.config.StorageProperties", + "import java.nio.file.Files", + "import java.nio.file.Path", + "import java.time.Duration", + "import java.time.Instant", + "import org.junit.jupiter.api.Assertions.assertFalse", + "import org.junit.jupiter.api.io.TempDir" + ], + "arg_patterns": {} + }, + { + "label": "modules/knowledgebase/ports/src/main/kotlin/eu/corentic/springrag/model", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"return sizeInBytes + additionalBytes <= sizeLimitBytes\"? \"return stats.canAcceptMoreContent(additionalBytes, sizeLimitBytes)\"? (\"return copy(\n stats = stats.applySizeDelta(sizeDelta),\n updatedAt = Instant.now()\n )\" | \"return copy(sizeInBytes = sizeInBytes + sizeDelta)\" | \"return copy(updatedAt = Instant.now())\")? \"canAcceptMoreContent\"?+ \"copy\"? \"applySizeDelta\"?+ \"now\"?+", + "mdl_score": 39, + "imports": [ + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import java.time.Instant" + ], + "arg_patterns": {} + }, + { + "label": "modules/knowledgebase/src/main/kotlin/eu/corentic/springrag/service/knowledgebase", + "method_count": 11, + "algorithm": "CRX", + "grammar": "root ::= \"of\"?+ \"stats\"? (\"debug\" | \"info\")?+ \"findById\"?+ \"documentCount\"? \"throw KnowledgeBaseNotFoundException(kbId)\"? \"toInt\"?+ \"throw\"? \"KnowledgeBaseNotFoundException\"?", + "mdl_score": 10, + "imports": [ + "import eu.corentic.springrag.common.ids.KnowledgeBaseId", + "import eu.corentic.springrag.model.KnowledgeBase", + "import eu.corentic.springrag.service.port.KnowledgeBasePort", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.beans.factory.annotation.Value", + "import org.springframework.boot.CommandLineRunner", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import java.time.Instant", + "import eu.corentic.springrag.common.ids.JobId", + "import eu.corentic.springrag.model.event.DocumentDeletionRequested", + "import eu.corentic.springrag.model.event.KnowledgeBaseDeletionRequested", + "import eu.corentic.springrag.service.port.KnowledgeBaseDocumentPort", + "import org.springframework.context.ApplicationEventPublisher", + "import org.springframework.stereotype.Service", + "import org.springframework.transaction.annotation.Transactional", + "import java.util.*" + ], + "arg_patterns": {} + }, + { + "label": "modules/knowledgebase/src/test/kotlin/eu/corentic/springrag/service/knowledgebase", + "method_count": 16, + "algorithm": "CRX", + "grammar": "root ::= \"parse\"?+ \"corentic\"? \"springrag\"? \"model\"? \"KnowledgeBase\"?+ (\"asKnowledgeBaseId\" | \"every\" | \"findById\")?+", + "mdl_score": 267, + "imports": [ + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Test", + "import jakarta.validation.Validation", + "import kotlin.test.assertFalse", + "import kotlin.test.assertTrue", + "import eu.corentic.springrag.model.event.DocumentDeletionRequested", + "import eu.corentic.springrag.model.event.KnowledgeBaseDeletionRequested", + "import eu.corentic.springrag.service.port.KnowledgeBasePort", + "import eu.corentic.springrag.service.port.KnowledgeBaseDocumentPort", + "import eu.corentic.springrag.common.ids.asJobId", + "import eu.corentic.springrag.common.ids.asKnowledgeBaseId", + "import io.mockk.every", + "import io.mockk.just", + "import io.mockk.mockk", + "import io.mockk.runs", + "import io.mockk.slot", + "import io.mockk.verify", + "import java.time.Instant", + "import kotlin.test.assertEquals", + "import kotlin.test.assertNotNull", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import org.springframework.context.ApplicationEventPublisher" + ], + "arg_patterns": {} + }, + { + "label": "modules/security/src/main/kotlin/eu/corentic/springrag/security/config", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"request\"? \"UserDetailsRepositoryReactiveAuthenticationManager\"? (\"Boolean\" | \"getProperty\" | \"java\")?+ \"CommandLineRunner\"? \"BCryptPasswordEncoder\"? \"headers\"? \"setPasswordEncoder\"?+ \"acceptsProfiles\"?+ \"getFirst\"?+ \"return manager\"? \"of\"?+ \"AUTHORIZATION\"? \"activeProfiles\"? \"isEmpty\"?+ \"return http\n // Temporary: Thymeleaf pages may post forms; keep CSRF for browser endpoints.\n // Long-term: JWT-only API (no cookie auth), so this can be revisited.\n .csrf {\n it.csrfTokenRepository(CookieServerCsrfTokenRepository.withHttpOnlyFalse())\n it.requireCsrfProtectionMatcher(\n AndServerWebExchangeMatcher(\n CsrfWebFilter.DEFAULT_CSRF_MATCHER,\n NegatedServerWebExchangeMatcher(\n // CSRF is only relevant for browser cookie-based interactions.\n // LibreChat calls our /librechat/** endpoints server-to-server and won't send CSRF tokens.\n ServerWebExchangeMatchers.pathMatchers(\\\"/api/**\\\", \\\"/mcp/**\\\", \\\"/librechat/**\\\")\n )\n )\n )\n }\n .httpBasic { it.disable() }\n .formLogin {\n if (!enableFormLogin) {\n it.disable()\n }\n }\n .logout { it.disable() }\n .authenticationManager(authenticationManager)\n .authorizeExchange { exchange ->\n if (permitAll) {\n exchange.anyExchange().permitAll()\n } else {\n exchange\n // Public assets and auth endpoints\n .pathMatchers(\\\"/api/auth/**\\\", \\\"/login\\\", \\\"/logout\\\", \\\"/librechat/**\\\").permitAll()\n .pathMatchers(\\\"/actuator/health/**\\\", \\\"/mcp/**\\\").permitAll()\n .apply {\n if (permitLibreChat) {\n pathMatchers(\\\"/librechat/**\\\").permitAll()\n } else {\n pathMatchers(\\\"/librechat/**\\\").authenticated()\n }\n }\n .pathMatchers(\\\"/css/**\\\", \\\"/js/**\\\", \\\"/images/**\\\", \\\"/webjars/**\\\").permitAll()\n .pathMatchers(\\\"/\\\", \\\"/upload\\\", \\\"/jobs\\\", \\\"/chat\\\", \\\"/knowledge-bases\\\", \\\"/web/**\\\")\n .hasAnyAuthority(\\\"ROLE_USER\\\", \\\"ROLE_ADMIN\\\")\n .anyExchange().authenticated()\n }\n }\n .addFilterAt(jwtAuthenticationFilter, SecurityWebFiltersOrder.AUTHENTICATION)\n .build()\"? \"csrf\"?+ \"csrfTokenRepository\"?+ \"withHttpOnlyFalse\"?+ \"requireCsrfProtectionMatcher\"?+ \"AndServerWebExchangeMatcher\"? \"DEFAULT_CSRF_MATCHER\"? \"NegatedServerWebExchangeMatcher\"? (\"ROLE_ADMIN\" | \"anyExchange\" | \"apply\" | \"authenticated\" | \"authenticationManager\" | \"authorizeExchange\" | \"disable\" | \"else\" | \"findByUsername\" | \"formLogin\" | \"hasAnyAuthority\" | \"httpBasic\" | \"if\" | \"info\" | \"logout\" | \"pathMatchers\" | \"permitAll\" | \"registerUser\")?+ \"startsWith\"?+ \"addFilterAt\"?+ \"ROLE_USER\"? \"substring\"?+ \"AUTHENTICATION\"? \"when\"? \"build\"?+ \"parseToken\"?+ (\"Err\" | \"Ok\" | \"Outcome\" | \"UsernamePasswordAuthenticationToken\" | \"authorities\" | \"contextWrite\" | \"filter\" | \"return chain.filter(exchange)\" | \"return chain.filter(exchange)\n .contextWrite(ReactiveSecurityContextHolder.withAuthentication(authentication))\" | \"username\" | \"value\" | \"withAuthentication\")?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.Outcome", + "import eu.corentic.springrag.security.service.JwtService", + "import org.springframework.http.HttpHeaders", + "import org.springframework.security.authentication.UsernamePasswordAuthenticationToken", + "import org.springframework.security.core.context.ReactiveSecurityContextHolder", + "import org.springframework.stereotype.Component", + "import org.springframework.web.server.ServerWebExchange", + "import org.springframework.web.server.WebFilter", + "import org.springframework.web.server.WebFilterChain", + "import reactor.core.publisher.Mono", + "import org.springframework.context.annotation.Bean", + "import org.springframework.context.annotation.Configuration", + "import org.springframework.security.config.annotation.method.configuration.EnableReactiveMethodSecurity", + "import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity", + "import org.springframework.security.config.web.server.SecurityWebFiltersOrder", + "import org.springframework.security.config.web.server.ServerHttpSecurity", + "import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder", + "import org.springframework.security.crypto.password.PasswordEncoder", + "import org.springframework.security.web.server.SecurityWebFilterChain", + "import org.springframework.security.authentication.ReactiveAuthenticationManager", + "import org.springframework.security.core.userdetails.ReactiveUserDetailsService", + "import org.springframework.security.authentication.UserDetailsRepositoryReactiveAuthenticationManager", + "import org.springframework.security.web.server.csrf.CookieServerCsrfTokenRepository", + "import org.springframework.security.web.server.csrf.CsrfWebFilter", + "import org.springframework.security.web.server.util.matcher.AndServerWebExchangeMatcher", + "import org.springframework.security.web.server.util.matcher.NegatedServerWebExchangeMatcher", + "import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers", + "import org.springframework.core.env.Environment", + "import org.springframework.core.env.Profiles", + "import eu.corentic.springrag.security.model.Role", + "import eu.corentic.springrag.security.service.UserService", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.boot.CommandLineRunner", + "import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty" + ], + "arg_patterns": {} + }, + { + "label": "modules/security/src/main/kotlin/eu/corentic/springrag/security/service", + "method_count": 10, + "algorithm": "CRX", + "grammar": "root ::= \"parser\"?+ \"if\"? \"verifyWith\"?+ \"build\"?+ \"parseSignedClaims\"?+ \"payload\"?", + "mdl_score": 6, + "imports": [ + "import eu.corentic.springrag.security.repository.UserRepository", + "import org.springframework.security.core.userdetails.ReactiveUserDetailsService", + "import org.springframework.security.core.userdetails.User", + "import org.springframework.security.core.userdetails.UserDetails", + "import org.springframework.stereotype.Service", + "import reactor.core.publisher.Mono", + "import reactor.core.scheduler.Schedulers", + "import eu.corentic.springrag.common.DomainException", + "import eu.corentic.springrag.common.Outcome", + "import eu.corentic.springrag.security.model.User", + "import io.jsonwebtoken.ExpiredJwtException", + "import io.jsonwebtoken.Jwts", + "import io.jsonwebtoken.MalformedJwtException", + "import io.jsonwebtoken.UnsupportedJwtException", + "import io.jsonwebtoken.security.Keys", + "import io.jsonwebtoken.security.SecurityException", + "import java.nio.charset.StandardCharsets", + "import java.util.*", + "import javax.crypto.SecretKey", + "import eu.corentic.springrag.security.config.JwtProperties", + "import org.springframework.security.core.GrantedAuthority", + "import org.springframework.security.core.authority.SimpleGrantedAuthority", + "import java.util.UUID", + "import org.springframework.data.relational.core.mapping.event.BeforeConvertCallback", + "import org.springframework.stereotype.Component", + "import eu.corentic.springrag.security.model.Role", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import org.springframework.security.crypto.password.PasswordEncoder", + "import org.springframework.transaction.annotation.Transactional" + ], + "arg_patterns": {} + }, + { + "label": "modules/security/src/test/kotlin/eu/corentic/springrag/security/config", + "method_count": 6, + "algorithm": "CRX", + "grammar": "root ::= \"http\"?+ \"passwordEncoder\"?+ \"ReactiveAuthenticationManager\"? \"assertTrue\"? \"empty\"?+ \"BCryptPasswordEncoder\"? (\"ROLE_ADMIN\" | \"any\" | \"every\" | \"findByUsername\" | \"mockk\" | \"registerUser\" | \"run\" | \"seedUsers\" | \"verify\")?+ \"parseToken\"?+ \"ROLE_USER\"? \"JwtService\"? \"Err\"?+ \"Ok\"?+ \"JwtAuthenticationFilter\"? \"Malformed\"?+ \"ParsedJwt\"?+ \"springSecurityFilterChain\"?+ (\"AUTHORIZATION\" | \"AtomicReference\" | \"Authentication\" | \"SimpleGrantedAuthority\" | \"WebFilterChain\" | \"assertEquals\" | \"assertNull\" | \"authentication\" | \"block\" | \"build\" | \"doOnNext\" | \"filter\" | \"from\" | \"get\" | \"getContext\" | \"header\" | \"listOf\" | \"name\" | \"requireNotNull\" | \"set\" | \"then\")?+ \"assertNotNull\"? \"authorities\"? \"toList\"?+", + "mdl_score": 0, + "imports": [ + "import eu.corentic.springrag.common.Outcome", + "import eu.corentic.springrag.security.service.JwtService", + "import eu.corentic.springrag.security.service.JwtValidationError", + "import io.mockk.every", + "import io.mockk.mockk", + "import java.util.concurrent.atomic.AtomicReference", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertNull", + "import org.junit.jupiter.api.Test", + "import org.springframework.http.HttpHeaders", + "import org.springframework.mock.http.server.reactive.MockServerHttpRequest", + "import org.springframework.mock.web.server.MockServerWebExchange", + "import org.springframework.security.core.Authentication", + "import org.springframework.security.core.authority.SimpleGrantedAuthority", + "import org.springframework.security.core.context.ReactiveSecurityContextHolder", + "import org.springframework.web.server.WebFilterChain", + "import org.junit.jupiter.api.Assertions.assertNotNull", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.springframework.mock.env.MockEnvironment", + "import org.springframework.security.authentication.ReactiveAuthenticationManager", + "import org.springframework.security.config.web.server.ServerHttpSecurity", + "import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder", + "import reactor.core.publisher.Mono", + "import eu.corentic.springrag.security.model.Role", + "import eu.corentic.springrag.security.service.UserService", + "import io.mockk.just", + "import io.mockk.runs", + "import io.mockk.verify" + ], + "arg_patterns": {} + }, + { + "label": "modules/security/src/test/kotlin/eu/corentic/springrag/security/service", + "method_count": 15, + "algorithm": "CRX", + "grammar": "root ::= \"JwtService\"? \"every\"? \"JwtProperties\"? \"existsByUsername\"?+ \"any\"? \"assertThrows\"? \"PasswordPolicyViolationException\"? \"java\"? \"registerUser\"?+ \"assertEquals\"? \"errorCode\"?", + "mdl_score": 481, + "imports": [ + "import eu.corentic.springrag.common.Outcome", + "import eu.corentic.springrag.security.model.Role", + "import eu.corentic.springrag.security.model.User", + "import eu.corentic.springrag.security.config.JwtProperties", + "import io.jsonwebtoken.Jwts", + "import io.jsonwebtoken.security.Keys", + "import java.nio.charset.StandardCharsets", + "import java.util.UUID", + "import java.util.Date", + "import org.junit.jupiter.api.Assertions.assertEquals", + "import org.junit.jupiter.api.Assertions.assertFalse", + "import org.junit.jupiter.api.Assertions.assertTrue", + "import org.junit.jupiter.api.Test", + "import eu.corentic.springrag.security.repository.UserRepository", + "import io.mockk.MockKAnnotations", + "import io.mockk.every", + "import io.mockk.impl.annotations.MockK", + "import io.mockk.verify", + "import org.junit.jupiter.api.Assertions.assertThrows", + "import org.junit.jupiter.api.BeforeEach", + "import org.springframework.security.crypto.password.PasswordEncoder" + ], + "arg_patterns": {} + }, + { + "label": "platform/test-support/src/main/kotlin/eu/corentic/springrag/testcontainers", + "method_count": 13, + "imports": [ + "import com.github.dockerjava.api.model.DeviceRequest", + "import org.testcontainers.DockerClientFactory", + "import org.testcontainers.containers.GenericContainer", + "import io.github.oshai.kotlinlogging.KotlinLogging", + "import io.qdrant.client.QdrantClient", + "import io.qdrant.client.grpc.Collections.Distance", + "import io.qdrant.client.grpc.Collections.VectorParams", + "import java.util.concurrent.ExecutionException", + "import eu.corentic.springrag.testcontainers.GpuSupport.withGpuIfAvailable", + "import java.io.File", + "import java.time.Duration", + "import org.testcontainers.containers.BindMode", + "import org.testcontainers.containers.Neo4jContainer", + "import org.testcontainers.containers.PostgreSQLContainer", + "import org.testcontainers.containers.wait.strategy.Wait", + "import org.testcontainers.junit.jupiter.Container" + ], + "arg_patterns": {} + }, + { + "label": "platform/test-support/src/test/kotlin/eu/corentic/springrag/testcontainers", + "method_count": 5, + "algorithm": "CRX", + "grammar": "root ::= \"@\"? \"Suppress\"?+ (\"ArgumentMatchers\" | \"CollectionConfig\" | \"CollectionInfo\" | \"CollectionOperationResponse\" | \"CollectionParams\" | \"Collections\" | \"Cosine\" | \"Distance\" | \"ExecResult\" | \"GenericContainer\" | \"IllegalStateException\" | \"InterruptedException\" | \"ListenableFuture\" | \"Mockito\" | \"RuntimeException\" | \"VectorParams\" | \"VectorsConfig\" | \"`when`\" | \"any\" | \"anyString\" | \"apply\" | \"assertEquals\" | \"assertThrows\" | \"assertTrue\" | \"build\" | \"collectionPointCount\" | \"createCollectionAsync\" | \"currentThread\" | \"deleteCollectionAsync\" | \"eq\" | \"execInContainer\" | \"get\" | \"getCollectionInfoAsync\" | \"getDefaultInstance\" | \"immediateFailedFuture\" | \"immediateFuture\" | \"interrupted\" | \"isInterrupted\" | \"java\" | \"mock\" | \"mockito\" | \"newBuilder\" | \"pullAndWarmup\" | \"recreateTestCollection\" | \"setConfig\" | \"setDistance\" | \"setParams\" | \"setSize\" | \"setVectorsConfig\" | \"thenReturn\" | \"thenThrow\" | \"times\" | \"verify\" | \"with\")?+ \"message\"? \"contains\"?+", + "mdl_score": 473418, + "imports": [ + "import org.junit.jupiter.api.Test", + "import org.mockito.Mockito.mock", + "import org.mockito.Mockito.times", + "import org.mockito.Mockito.verify", + "import org.testcontainers.containers.Container", + "import org.testcontainers.containers.GenericContainer", + "import com.google.common.util.concurrent.Futures", + "import com.google.common.util.concurrent.ListenableFuture", + "import io.qdrant.client.QdrantClient", + "import io.qdrant.client.grpc.Collections", + "import org.junit.jupiter.api.assertThrows", + "import org.mockito.ArgumentMatchers.any", + "import org.mockito.Mockito.`when`", + "import kotlin.test.assertEquals", + "import kotlin.test.assertTrue" + ], + "arg_patterns": {} + }, + { + "label": "(other)", + "method_count": 6, + "imports": [], + "arg_patterns": {} + } + ], + "total_methods": 1609 + }, + { + "language": ".js", + "conventions": [ + { + "label": "compose/patches", + "method_count": 17, + "imports": [], + "arg_patterns": { + "require": { + "occurrences": 24, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 24, + "args": 1, + "types": [ + "lit" + ] + } + ] + }, + "getFiles": { + "occurrences": 2, + "arg_count": { + "min": 3, + "max": 3, + "common": 3 + }, + "patterns": [ + { + "count": 2, + "args": 3, + "types": [ + "other", + "lit", + "other" + ] + } + ] + }, + "tool": { + "occurrences": 2, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 2, + "args": 2, + "types": [ + "other", + "other" + ] + } + ] + }, + "Set": { + "occurrences": 3, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 3, + "args": 1, + "types": [ + "var" + ] + } + ] + }, + "generateShortLivedToken": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "var" + ] + } + ] + }, + "filterFilesByAgentAccess": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "new": { + "occurrences": 3, + "arg_count": { + "min": 0, + "max": 1, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + }, + { + "count": 1, + "args": 1, + "types": [ + "var" + ] + } + ] + }, + "Map": { + "occurrences": 3, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 3, + "args": 0, + "types": [] + } + ] + }, + "clearTimeout": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "setTimeout": { + "occurrences": 4, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 4, + "args": 2, + "types": [ + "other", + "other" + ] + } + ] + }, + "EmbeddingPollerImpl": { + "occurrences": 2, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + } + ] + } + } + }, + { + "label": "testing/steps", + "method_count": 68, + "imports": [ + "import { Given, When, Then } from '@cucumber/cucumber';", + "import { expect } from '@playwright/test';", + "import { BeforeAll, AfterAll, Before, After, setDefaultTimeout } from '@cucumber/cucumber';" + ], + "arg_patterns": { + "fetch": { + "occurrences": 6, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 6, + "args": 1, + "types": [ + "lit" + ] + } + ] + }, + "expect": { + "occurrences": 40, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 16, + "args": 1, + "types": [ + "var" + ] + }, + { + "count": 14, + "args": 1, + "types": [ + "other" + ] + }, + { + "count": 10, + "args": 1, + "types": [ + "call" + ] + } + ] + }, + "Then": { + "occurrences": 40, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 40, + "args": 2, + "types": [ + "lit", + "other" + ] + } + ] + }, + "Given": { + "occurrences": 24, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 24, + "args": 2, + "types": [ + "lit", + "other" + ] + } + ] + }, + "When": { + "occurrences": 54, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 54, + "args": 2, + "types": [ + "lit", + "other" + ] + } + ] + }, + "setDefaultTimeout": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "lit" + ] + } + ] + }, + "Before": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "After": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "createAgent": { + "occurrences": 4, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 4, + "args": 2, + "types": [ + "lit", + "lit" + ] + } + ] + } + } + }, + { + "label": "testing/support", + "method_count": 3, + "algorithm": "CRX", + "grammar": "root ::= (\"await\" | \"catch\" | \"chromium\" | \"close\" | \"launch\" | \"newContext\" | \"process\")?+ \"return\"? \"newPage\"? \"Date\"?+ \"now\"? \"toString\"?", + "mdl_score": 7112, + "imports": [ + "import { chromium } from '@playwright/test';", + "import { setWorldConstructor } from '@cucumber/cucumber';" + ], + "arg_patterns": { + "setWorldConstructor": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "var" + ] + } + ] + } + } + }, + { + "label": "(other)", + "method_count": 1, + "imports": [], + "arg_patterns": {} + } + ], + "total_methods": 89 + }, + { + "language": ".java", + "conventions": [], + "total_methods": 0 + }, + { + "language": ".go", + "conventions": [ + { + "label": "tools/setup-ui", + "method_count": 44, + "imports": [ + "import (" + ], + "arg_patterns": { + "initialModel": { + "occurrences": 2, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + } + ] + }, + "runStart": { + "occurrences": 2, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + } + ] + }, + "buildSteps": { + "occurrences": 2, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + } + ] + }, + "errorStyle": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "summarizeConfig": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "expr" + ] + } + ] + }, + "len": { + "occurrences": 42, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 30, + "args": 1, + "types": [ + "other" + ] + }, + { + "count": 12, + "args": 1, + "types": [ + "var" + ] + } + ] + }, + "accent": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "muted": { + "occurrences": 8, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 4, + "args": 1, + "types": [ + "other" + ] + }, + { + "count": 2, + "args": 1, + "types": [ + "var" + ] + }, + { + "count": 2, + "args": 1, + "types": [ + "expr" + ] + } + ] + }, + "banner": { + "occurrences": 2, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + } + ] + }, + "sectionTitle": { + "occurrences": 10, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 10, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "make": { + "occurrences": 9, + "arg_count": { + "min": 3, + "max": 3, + "common": 3 + }, + "patterns": [ + { + "count": 9, + "args": 3, + "types": [ + "other", + "other", + "call" + ] + } + ] + }, + "repoRoot": { + "occurrences": 2, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + } + ] + }, + "append": { + "occurrences": 51, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 24, + "args": 2, + "types": [ + "var", + "call" + ] + }, + { + "count": 9, + "args": 2, + "types": [ + "var", + "var" + ] + }, + { + "count": 6, + "args": 2, + "types": [ + "var", + "other" + ] + }, + { + "count": 6, + "args": 2, + "types": [ + "other", + "other" + ] + }, + { + "count": 3, + "args": 2, + "types": [ + "other", + "var" + ] + } + ] + }, + "string": { + "occurrences": 4, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 4, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "writeEnvFile": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "float64": { + "occurrences": 4, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "call" + ] + }, + { + "count": 2, + "args": 1, + "types": [ + "expr" + ] + } + ] + }, + "sortedKeys": { + "occurrences": 4, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 4, + "args": 1, + "types": [ + "other" + ] + } + ] + }, + "isSensitiveKey": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "var" + ] + } + ] + }, + "writeExport": { + "occurrences": 8, + "arg_count": { + "min": 3, + "max": 3, + "common": 3 + }, + "patterns": [ + { + "count": 4, + "args": 3, + "types": [ + "var", + "other", + "call" + ] + }, + { + "count": 2, + "args": 3, + "types": [ + "var", + "other", + "other" + ] + }, + { + "count": 2, + "args": 3, + "types": [ + "var", + "var", + "other" + ] + } + ] + }, + "removeString": { + "occurrences": 2, + "arg_count": { + "min": 2, + "max": 2, + "common": 2 + }, + "patterns": [ + { + "count": 2, + "args": 2, + "types": [ + "other", + "other" + ] + } + ] + }, + "shellEscape": { + "occurrences": 2, + "arg_count": { + "min": 1, + "max": 1, + "common": 1 + }, + "patterns": [ + { + "count": 2, + "args": 1, + "types": [ + "var" + ] + } + ] + }, + "newConfig": { + "occurrences": 2, + "arg_count": { + "min": 0, + "max": 0, + "common": 0 + }, + "patterns": [ + { + "count": 2, + "args": 0, + "types": [] + } + ] + } + } + } + ], + "total_methods": 44 + } +] diff --git a/experiments/results/round20_ast_verify/ragsak_v4.log b/experiments/results/round20_ast_verify/ragsak_v4.log new file mode 100644 index 0000000..6a242bd --- /dev/null +++ b/experiments/results/round20_ast_verify/ragsak_v4.log @@ -0,0 +1,264 @@ +[ 0.0s] Scanning /home/tobi/Desktop/kesai/RAGSAK ... +[ 0.1s] Preprocessing 462 files across 12 workers ... +[ 2.9s] Preprocess: 1609 methods from 462 .kt files (2.8s) +[ 2.9s] Groups: 120 named, 6 ungrouped methods +[ 2.9s] ├ agents (5 methods) +[ 2.9s] ├ agents/capability/ports/src/main/kotlin/eu/corentic/springrag/agent/capability (5 methods) +[ 2.9s] ├ agents/capability/support/src/main/kotlin/eu/corentic/springrag/agent/capability/support (5 methods) +[ 2.9s] ├ agents/capability/support/src/test/kotlin/eu/corentic/springrag/agent/capability/support (6 methods) +[ 2.9s] ├ agents/examples/simple-rag/src/main/kotlin/eu/corentic/springrag/example/rag/simple (9 methods) +[ 2.9s] ├ agents/examples/simple-rag/src/test/kotlin/eu/corentic/springrag/example/rag/simple (14 methods) +[ 2.9s] ├ agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel (58 methods) +[ 2.9s] ├ agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel/librechat (13 methods) +[ 2.9s] ├ agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/agent/rag/embabel (36 methods) +[ 2.9s] ├ agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) +[ 2.9s] ├ agents/rag/ports/src/main/kotlin/eu/corentic/springrag/agent/rag (4 methods) +[ 2.9s] ├ agents/rag/ports/src/test/kotlin/eu/corentic/springrag/agent/rag (3 methods) +[ 2.9s] ├ agents/rag/ports/src/test/kotlin/eu/corentic/springrag/model (3 methods) +[ 2.9s] ├ agents/rag/support/src/main/kotlin/eu/corentic/springrag/agent/rag/support (13 methods) +[ 2.9s] ├ agents/rag/support/src/test/kotlin/eu/corentic/springrag/agent/rag/support (11 methods) +[ 2.9s] ├ agents/summarizer/embabel/src/main/kotlin/eu/corentic/springrag/agent/summarizer/embabel (13 methods) +[ 2.9s] ├ agents/summarizer/embabel/src/test/kotlin/eu/corentic/springrag/agent/summarizer/embabel (14 methods) +[ 2.9s] ├ agents/tooling/agent/src/main/kotlin/eu/corentic/springrag/agent/tooling/agent (4 methods) +[ 2.9s] ├ agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel (12 methods) +[ 2.9s] ├ agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel/recording (11 methods) +[ 2.9s] ├ agents/tooling/embabel/src/test/kotlin/eu/corentic/springrag/agent/tooling/embabel (6 methods) +[ 2.9s] ├ agents/wikipedia/adapters/src/main/kotlin/eu/corentic/springrag/agent/wikipedia (4 methods) +[ 2.9s] ├ agents/wikipedia/adapters/src/test/kotlin/eu/corentic/springrag/agent/wikipedia (8 methods) +[ 2.9s] ├ agents/wikipedia/static/src/main/kotlin/eu/corentic/springrag/agent/wikipedia (3 methods) +[ 2.9s] ├ agents/wikipedia/static/src/test/kotlin/eu/corentic/springrag/agent/wikipedia (3 methods) +[ 2.9s] ├ app/src (6 methods) +[ 2.9s] ├ app/src/e2eTest/kotlin/eu/corentic/springrag/e2e/cucumber/steps (17 methods) +[ 2.9s] ├ app/src/integrationTest/kotlin/eu/corentic/springrag/config (15 methods) +[ 2.9s] ├ app/src/integrationTest/kotlin/eu/corentic/springrag/controller (5 methods) +[ 2.9s] ├ app/src/integrationTest/kotlin/eu/corentic/springrag/service (3 methods) +[ 2.9s] ├ app/src/systemTest/kotlin/eu/corentic/springrag/config (14 methods) +[ 2.9s] ├ app/src/systemTest/kotlin/eu/corentic/springrag/system (46 methods) +[ 2.9s] ├ app/src/test/kotlin/eu/corentic/springrag/architecture (87 methods) +[ 2.9s] ├ app/src/test/kotlin/eu/corentic/springrag/config (3 methods) +[ 2.9s] ├ buildSrc/src/main/kotlin (8 methods) +[ 2.9s] ├ buildSrc/src/test/kotlin (5 methods) +[ 2.9s] ├ entrypoints/agent-mcp-server/src/main/kotlin/eu/corentic/springrag/mcp (3 methods) +[ 2.9s] ├ entrypoints/agent-mcp-server/src/test/kotlin/eu/corentic/springrag/mcp (3 methods) +[ 2.9s] ├ entrypoints/web/src/main/kotlin/eu/corentic/springrag/config (3 methods) +[ 2.9s] ├ entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller (58 methods) +[ 2.9s] ├ entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/librechat (29 methods) +[ 2.9s] ├ entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/web (6 methods) +[ 2.9s] ├ entrypoints/web/src/test/kotlin/eu/corentic/springrag/config (4 methods) +[ 2.9s] ├ entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller (83 methods) +[ 2.9s] ├ entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/auth (5 methods) +[ 2.9s] ├ entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/librechat (46 methods) +[ 2.9s] ├ entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/web (10 methods) +[ 2.9s] ├ infrastructure/adapters (3 methods) +[ 2.9s] ├ infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/config (4 methods) +[ 2.9s] ├ infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/health (3 methods) +[ 2.9s] ├ infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/config (6 methods) +[ 2.9s] ├ infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/health (4 methods) +[ 2.9s] ├ infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/service/embedding (5 methods) +[ 2.9s] ├ infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) +[ 2.9s] ├ infrastructure/adapters/chat-memory/src/test/kotlin/eu/corentic/springrag/config (6 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src (6 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/config (3 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/service/docling (21 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src/systemTest/kotlin/eu/corentic/springrag/config (6 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/config (12 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/health (3 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/service/docling (10 methods) +[ 2.9s] ├ infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/health (7 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/model/graph (9 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/repository (24 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/agent (3 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/cleanup (4 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/graph (12 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/port/adapter (45 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/storage (40 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/config (4 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/repository/graph (23 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/system (6 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/config (3 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/health (6 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/model/graph (7 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/repository (19 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/cleanup (4 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/graph (30 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/port/adapter (28 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/storage (3 methods) +[ 2.9s] ├ infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) +[ 2.9s] ├ modules/chat/src/integrationTest/kotlin/eu/corentic/springrag/service/chat (4 methods) +[ 2.9s] ├ modules/chat/src/main/kotlin/eu/corentic/springrag/service/chat (6 methods) +[ 2.9s] ├ modules/chat/src/systemTest/kotlin/eu/corentic/springrag/config (15 methods) +[ 2.9s] ├ modules/chat/src/systemTest/kotlin/eu/corentic/springrag/system (4 methods) +[ 2.9s] ├ modules/chat/src/test/kotlin/eu/corentic/springrag/service/chat (8 methods) +[ 2.9s] ├ modules/common/src/main/kotlin/eu/corentic/springrag/common (7 methods) +[ 2.9s] ├ modules/common/src/main/kotlin/eu/corentic/springrag/common/ids (18 methods) +[ 2.9s] ├ modules/common/src/test/kotlin/eu/corentic/springrag/common/ids (8 methods) +[ 2.9s] ├ modules/ingestion/src/integrationTest/kotlin/eu/corentic/springrag/service/job (34 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch (16 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/listener (16 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/model (4 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/partition (4 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/reader (4 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/writer (3 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/config (26 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/chunk (18 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/document (3 methods) +[ 2.9s] ├ modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/job (62 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch (17 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/listener (34 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/model (8 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/partition (7 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/processor (5 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/reader (12 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/writer (14 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/chunk (8 methods) +[ 2.9s] ├ modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/job (49 methods) +[ 2.9s] ├ modules/knowledgebase/ports/src/main/kotlin/eu/corentic/springrag/model (5 methods) +[ 2.9s] ├ modules/knowledgebase/src/main/kotlin/eu/corentic/springrag/service/knowledgebase (11 methods) +[ 2.9s] ├ modules/knowledgebase/src/test/kotlin/eu/corentic/springrag/service/knowledgebase (16 methods) +[ 2.9s] ├ modules/security/src/main/kotlin/eu/corentic/springrag/security/config (5 methods) +[ 2.9s] ├ modules/security/src/main/kotlin/eu/corentic/springrag/security/service (10 methods) +[ 2.9s] ├ modules/security/src/test/kotlin/eu/corentic/springrag/security/config (6 methods) +[ 2.9s] ├ modules/security/src/test/kotlin/eu/corentic/springrag/security/service (15 methods) +[ 2.9s] ├ platform/test-support/src/main/kotlin/eu/corentic/springrag/testcontainers (13 methods) +[ 2.9s] ├ platform/test-support/src/test/kotlin/eu/corentic/springrag/testcontainers (5 methods) +[ 2.9s] └ (other) (6 methods) +[ 2.9s] Inferring 120 groups across 12 workers ... +[ 3.1s] [1/120] agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) done (0.2s) +[ 3.1s] [2/120] agents/rag/ports/src/test/kotlin/eu/corentic/springrag/agent/rag (3 methods) done (0.2s) +[ 3.2s] [3/120] agents/rag/ports/src/main/kotlin/eu/corentic/springrag/agent/rag (4 methods) done (0.3s) +[ 3.2s] [4/120] agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel/librechat (13 methods) done (0.3s) +[ 3.2s] [5/120] agents/capability/ports/src/main/kotlin/eu/corentic/springrag/agent/capability (5 methods) done (0.3s) +[ 3.2s] [6/120] agents/capability/support/src/test/kotlin/eu/corentic/springrag/agent/capability/support (6 methods) done (0.3s) +[ 3.2s] [7/120] agents/rag/ports/src/test/kotlin/eu/corentic/springrag/model (3 methods) done (0.3s) +[ 3.2s] [8/120] agents/capability/support/src/main/kotlin/eu/corentic/springrag/agent/capability/support (5 methods) done (0.3s) +[ 3.2s] [9/120] agents/examples/simple-rag/src/main/kotlin/eu/corentic/springrag/example/rag/simple (9 methods) done (0.3s) +[ 3.2s] [10/120] agents (5 methods) done (0.3s) +[ 3.3s] [11/120] agents/tooling/agent/src/main/kotlin/eu/corentic/springrag/agent/tooling/agent (4 methods) done (0.4s) +[ 3.3s] [12/120] agents/rag/support/src/main/kotlin/eu/corentic/springrag/agent/rag/support (13 methods) done (0.4s) +[ 3.3s] [13/120] agents/examples/simple-rag/src/test/kotlin/eu/corentic/springrag/example/rag/simple (14 methods) done (0.4s) +[ 3.3s] [14/120] agents/wikipedia/static/src/main/kotlin/eu/corentic/springrag/agent/wikipedia (3 methods) done (0.4s) +[ 3.4s] [15/120] agents/wikipedia/adapters/src/main/kotlin/eu/corentic/springrag/agent/wikipedia (4 methods) done (0.5s) +[ 3.4s] [16/120] agents/wikipedia/static/src/test/kotlin/eu/corentic/springrag/agent/wikipedia (3 methods) done (0.5s) +[ 3.4s] [17/120] agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel/recording (11 methods) done (0.5s) +[ 3.4s] [18/120] agents/rag/support/src/test/kotlin/eu/corentic/springrag/agent/rag/support (11 methods) done (0.5s) +[ 3.4s] [19/120] agents/summarizer/embabel/src/main/kotlin/eu/corentic/springrag/agent/summarizer/embabel (13 methods) done (0.5s) +[ 3.5s] [20/120] agents/wikipedia/adapters/src/test/kotlin/eu/corentic/springrag/agent/wikipedia (8 methods) done (0.6s) +[ 3.5s] [21/120] app/src/integrationTest/kotlin/eu/corentic/springrag/service (3 methods) done (0.6s) +[ 3.5s] [22/120] agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel (58 methods) done (0.6s) +[ 3.5s] [23/120] agents/tooling/embabel/src/test/kotlin/eu/corentic/springrag/agent/tooling/embabel (6 methods) done (0.6s) +[ 3.5s] [24/120] agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/agent/rag/embabel (36 methods) done (0.6s) +[ 3.5s] [25/120] agents/summarizer/embabel/src/test/kotlin/eu/corentic/springrag/agent/summarizer/embabel (14 methods) done (0.6s) +[ 3.6s] [26/120] app/src/integrationTest/kotlin/eu/corentic/springrag/controller (5 methods) done (0.7s) +[ 3.6s] [27/120] app/src/integrationTest/kotlin/eu/corentic/springrag/config (15 methods) done (0.7s) +[ 3.6s] [28/120] buildSrc/src/main/kotlin (8 methods) done (0.7s) +[ 3.6s] [29/120] app/src/test/kotlin/eu/corentic/springrag/config (3 methods) done (0.7s) +[ 3.6s] [30/120] app/src/systemTest/kotlin/eu/corentic/springrag/config (14 methods) done (0.7s) +[ 3.7s] [31/120] app/src/e2eTest/kotlin/eu/corentic/springrag/e2e/cucumber/steps (17 methods) done (0.8s) +[ 3.7s] [32/120] agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel (12 methods) done (0.8s) +[ 3.7s] [33/120] app/src/test/kotlin/eu/corentic/springrag/architecture (87 methods) done (0.8s) +[ 3.7s] [34/120] buildSrc/src/test/kotlin (5 methods) done (0.8s) +[ 3.7s] [35/120] app/src (6 methods) done (0.8s) +[ 3.8s] [36/120] entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/librechat (29 methods) done (0.9s) +[ 3.8s] [37/120] entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/auth (5 methods) done (0.9s) +[ 3.8s] [38/120] entrypoints/agent-mcp-server/src/test/kotlin/eu/corentic/springrag/mcp (3 methods) done (0.9s) +[ 3.8s] [39/120] entrypoints/agent-mcp-server/src/main/kotlin/eu/corentic/springrag/mcp (3 methods) done (0.9s) +[ 3.8s] [40/120] entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/web (6 methods) done (0.9s) +[ 3.8s] [41/120] entrypoints/web/src/test/kotlin/eu/corentic/springrag/config (4 methods) done (0.9s) +[ 3.8s] [42/120] entrypoints/web/src/main/kotlin/eu/corentic/springrag/config (3 methods) done (0.9s) +[ 3.8s] [43/120] app/src/systemTest/kotlin/eu/corentic/springrag/system (46 methods) done (0.9s) +[ 3.9s] [44/120] entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/web (10 methods) done (1.0s) +[ 3.9s] [45/120] infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/health (4 methods) done (1.0s) +[ 3.9s] [46/120] infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/health (3 methods) done (1.0s) +[ 3.9s] [47/120] entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/librechat (46 methods) done (1.0s) +[ 3.9s] [48/120] infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/service/embedding (5 methods) done (1.0s) +[ 3.9s] [49/120] infrastructure/adapters/chat-memory/src/test/kotlin/eu/corentic/springrag/config (6 methods) done (1.0s) +[ 3.9s] [50/120] infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) done (1.0s) +[ 3.9s] [51/120] infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/config (6 methods) done (1.0s) +[ 4.0s] [52/120] infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/health (3 methods) done (1.1s) +[ 4.0s] [53/120] infrastructure/adapters (3 methods) done (1.1s) +[ 4.0s] [54/120] infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) done (1.1s) +[ 4.0s] [55/120] infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/config (3 methods) done (1.1s) +[ 4.1s] [56/120] infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/service/docling (10 methods) done (1.2s) +[ 4.1s] [57/120] infrastructure/adapters/doc-parser/src/systemTest/kotlin/eu/corentic/springrag/config (6 methods) done (1.2s) +[ 4.1s] [58/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/health (7 methods) done (1.2s) +[ 4.1s] [59/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/agent (3 methods) done (1.2s) +[ 4.1s] [60/120] infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/service/docling (21 methods) done (1.2s) +[ 4.1s] [61/120] entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller (58 methods) done (1.2s) +[ 4.2s] [62/120] infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/config (12 methods) done (1.3s) +[ 4.2s] [63/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/graph (12 methods) done (1.3s) +[ 4.2s] [64/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/repository (24 methods) done (1.3s) +[ 4.2s] [65/120] infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/config (4 methods) done (1.3s) +[ 4.2s] [66/120] infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/config (4 methods) done (1.3s) +[ 4.2s] [67/120] entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller (83 methods) done (1.3s) +[ 4.2s] [68/120] infrastructure/adapters/doc-parser/src (6 methods) done (1.3s) +[ 4.2s] [69/120] infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/system (6 methods) done (1.3s) +[ 4.2s] [70/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/model/graph (9 methods) done (1.3s) +[ 4.3s] [71/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/storage (40 methods) done (1.4s) +[ 4.3s] [72/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/repository (19 methods) done (1.4s) +[ 4.3s] [73/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/health (6 methods) done (1.4s) +[ 4.3s] [74/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/config (3 methods) done (1.4s) +[ 4.3s] [75/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/storage (3 methods) done (1.4s) +[ 4.3s] [76/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/cleanup (4 methods) done (1.4s) +[ 4.3s] [77/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/graph (30 methods) done (1.4s) +[ 4.4s] [78/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/testsupport (3 methods) done (1.5s) +[ 4.4s] [79/120] modules/chat/src/main/kotlin/eu/corentic/springrag/service/chat (6 methods) done (1.5s) +[ 4.4s] [80/120] modules/common/src/main/kotlin/eu/corentic/springrag/common (7 methods) done (1.5s) +[ 4.4s] [81/120] infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/repository/graph (23 methods) done (1.5s) +[ 4.4s] [82/120] modules/common/src/main/kotlin/eu/corentic/springrag/common/ids (18 methods) done (1.5s) +[ 4.4s] [83/120] modules/common/src/test/kotlin/eu/corentic/springrag/common/ids (8 methods) done (1.5s) +[ 4.4s] [84/120] modules/chat/src/integrationTest/kotlin/eu/corentic/springrag/service/chat (4 methods) done (1.5s) +[ 4.4s] [85/120] modules/chat/src/systemTest/kotlin/eu/corentic/springrag/system (4 methods) done (1.5s) +[ 4.5s] [86/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/model/graph (7 methods) done (1.6s) +[ 4.5s] [87/120] modules/chat/src/test/kotlin/eu/corentic/springrag/service/chat (8 methods) done (1.6s) +[ 4.5s] [88/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/cleanup (4 methods) done (1.6s) +[ 4.6s] [89/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch (16 methods) done (1.7s) +[ 4.6s] [90/120] modules/chat/src/systemTest/kotlin/eu/corentic/springrag/config (15 methods) done (1.7s) +[ 4.6s] [91/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/document (3 methods) done (1.7s) +[ 4.6s] [92/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/model (4 methods) done (1.7s) +[ 4.6s] [93/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/reader (4 methods) done (1.7s) +[ 4.7s] [94/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/config (26 methods) done (1.8s) +[ 4.7s] [95/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/writer (3 methods) done (1.8s) +[ 4.7s] [96/120] infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/port/adapter (45 methods) done (1.8s) +[ 4.8s] [97/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/listener (16 methods) done (1.9s) +[ 4.8s] [98/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/partition (7 methods) done (1.9s) +[ 4.8s] [99/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/model (8 methods) done (1.9s) +[ 4.8s] [100/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/chunk (18 methods) done (1.9s) +[ 4.8s] [101/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/reader (12 methods) done (1.9s) +[ 4.8s] [102/120] infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/port/adapter (28 methods) done (1.9s) +[ 4.8s] [103/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/processor (5 methods) done (1.9s) +[ 4.8s] [104/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/partition (4 methods) done (1.9s) +[ 4.9s] [105/120] modules/ingestion/src/integrationTest/kotlin/eu/corentic/springrag/service/job (34 methods) done (2.0s) +[ 4.9s] [106/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/chunk (8 methods) done (2.0s) +[ 4.9s] [107/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch (17 methods) done (2.0s) +[ 4.9s] [108/120] modules/knowledgebase/ports/src/main/kotlin/eu/corentic/springrag/model (5 methods) done (2.0s) +[ 4.9s] [109/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/listener (34 methods) done (2.0s) +[ 4.9s] [110/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/writer (14 methods) done (2.0s) +[ 5.0s] [111/120] modules/security/src/test/kotlin/eu/corentic/springrag/security/service (15 methods) done (2.1s) +[ 5.0s] [112/120] modules/knowledgebase/src/test/kotlin/eu/corentic/springrag/service/knowledgebase (16 methods) done (2.1s) +[ 5.0s] [113/120] modules/knowledgebase/src/main/kotlin/eu/corentic/springrag/service/knowledgebase (11 methods) done (2.1s) +[ 5.1s] [114/120] modules/security/src/main/kotlin/eu/corentic/springrag/security/service (10 methods) done (2.2s) +[ 5.2s] [115/120] platform/test-support/src/main/kotlin/eu/corentic/springrag/testcontainers (13 methods) done (2.3s) +[ 5.2s] [116/120] modules/security/src/test/kotlin/eu/corentic/springrag/security/config (6 methods) done (2.3s) +[ 5.2s] [117/120] platform/test-support/src/test/kotlin/eu/corentic/springrag/testcontainers (5 methods) done (2.3s) +[ 5.2s] [118/120] modules/security/src/main/kotlin/eu/corentic/springrag/security/config (5 methods) done (2.3s) +[ 5.4s] [119/120] modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/job (49 methods) done (2.5s) +[ 5.5s] [120/120] modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/job (62 methods) done (2.6s) +[ 5.5s] Preprocessing 17 files across 12 workers ... +[ 5.8s] Preprocess: 89 methods from 17 .js files (0.3s) +[ 5.8s] Groups: 3 named, 1 ungrouped methods +[ 5.8s] ├ compose/patches (17 methods) +[ 5.8s] ├ testing/steps (68 methods) +[ 5.8s] ├ testing/support (3 methods) +[ 5.8s] └ (other) (1 methods) +[ 5.8s] Inferring 3 groups across 12 workers ... +[ 5.9s] [1/3] compose/patches (17 methods) done (0.1s) +[ 5.9s] [2/3] testing/support (3 methods) done (0.2s) +[ 6.0s] [3/3] testing/steps (68 methods) done (0.2s) +[ 6.0s] Preprocessing 5 files across 12 workers ... +[ 6.1s] Preprocessing 1 files across 12 workers ... +[ 6.2s] Preprocess: 44 methods from 1 .go files (0.1s) +[ 6.2s] Groups: 1 named, 0 ungrouped methods +[ 6.2s] ├ tools/setup-ui (44 methods) +[ 6.2s] Inferring 1 groups across 12 workers ... +[ 6.3s] [1/1] tools/setup-ui (44 methods) done (0.1s) diff --git a/tests/test_analyze.py b/tests/test_analyze.py index e81af45..6d64b59 100644 --- a/tests/test_analyze.py +++ b/tests/test_analyze.py @@ -168,44 +168,67 @@ def test_infer_low_coverage_filters_noise(): print(" PASS test_infer_low_coverage_filters_noise") +from bex.grammar import ( + Symbol, Concat, Alt, Optional, Plus, Star, Empty, +) + + def test_count_optionals_flat_chain(): - n_opt, n_total = _count_optionals("a?.b?.c?.d?.e?") + g = Concat([Optional(Symbol('a')), Optional(Symbol('b')), Optional(Symbol('c')), + Optional(Symbol('d')), Optional(Symbol('e'))]) + n_opt, n_total = _count_optionals(g) assert n_opt == 5 assert n_total == 5 def test_count_optionals_no_optionals(): - n_opt, n_total = _count_optionals("a.b.c") + g = Concat([Symbol('a'), Symbol('b'), Symbol('c')]) + n_opt, n_total = _count_optionals(g) assert n_opt == 0 assert n_total == 3 def test_count_optionals_mixed(): - n_opt, n_total = _count_optionals("return.error?.(request+response)?.data?") - assert n_opt == 3 # error?, (request+response)?, data? - assert n_total == 4 # return.error?.(request+response)?.data? + # return . error? . (request|response)? . data? -> 3 optional of 4 parts + g = Concat([ + Symbol('return'), + Optional(Symbol('error')), + Optional(Alt([Symbol('request'), Symbol('response')])), + Optional(Symbol('data')), + ]) + n_opt, n_total = _count_optionals(g) + assert n_opt == 3 + assert n_total == 4 def test_count_optionals_repetition_not_optional(): - n_opt, n_total = _count_optionals("a.b+.c?") - assert n_opt == 1 # only c? is optional + # a . b+ . c? -> only c? is optional + g = Concat([Symbol('a'), Plus(Symbol('b')), Optional(Symbol('c'))]) + n_opt, n_total = _count_optionals(g) + assert n_opt == 1 assert n_total == 3 def test_should_try_idregex_small_many_optionals(): - assert _should_try_idregex("a?.b?.c?.d?.e?", 5) is True + g = Concat([Optional(Symbol('a')), Optional(Symbol('b')), Optional(Symbol('c')), + Optional(Symbol('d')), Optional(Symbol('e'))]) + assert _should_try_idregex(g, 5) is True def test_should_try_idregex_large_group(): - assert _should_try_idregex("a?.b?.c?.d?.e?", 15) is False + g = Concat([Optional(Symbol('a')), Optional(Symbol('b')), Optional(Symbol('c')), + Optional(Symbol('d')), Optional(Symbol('e'))]) + assert _should_try_idregex(g, 15) is False def test_should_try_idregex_few_optionals(): - assert _should_try_idregex("a.b.c.d.e", 5) is False + g = Concat([Symbol('a'), Symbol('b'), Symbol('c'), Symbol('d'), Symbol('e')]) + assert _should_try_idregex(g, 5) is False def test_should_short_concat(): - assert _should_try_idregex("a?.b", 5) is False # too few parts + g = Concat([Optional(Symbol('a')), Symbol('b')]) + assert _should_try_idregex(g, 5) is False # too few parts def run_all():