Skip to content
View jewoodev's full-sized avatar

Block or report jewoodev

Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
jewoodev/README.md

I'm a backend engineer working with Java / Kotlin / Spring Boot and an open-source contributor across the Spring and JetBrains ecosystems, with a focus on query processing, tool calling, streaming, and provider interoperability.

📌 Representative upstreamed work, curated by impact. The project-header links show the full PR history, including active, documentation, and maintenance contributions.


🌱 Open Source Contributions

⭐ JPQL / EQL / HQL query renderers — fix 4 round-trip defects

  • Problem: Spring Data JPA's query renderers re-emitted several grammar constructs differently from the original input during the parse → AST → render round trip.
  • Fix: Corrected four independent visitor-layer defects involving TREAT(...), two-argument LOCATE(...), collection-member subqueries, and the HQL column(...) cast target.
  • Scope: JpqlQueryRenderer, EqlQueryRenderer, and HqlQueryRenderer, without modifying the ANTLR grammar definitions.
  • Tests: Added round-trip regression coverage for all four defects.
  • Outcome: Upstreamed from #4273, polished by the maintainer, and backported.

⭐ JPQL / EQL collection-membership grammar correctness

  • Problem: JPQL and EQL rejected valid collection-membership expressions involving single-character string literals or map KEY(...) / VALUE(...) expressions.
  • Fix: Added CHARACTER support to the applicable literal rules and widened the collection-membership operand to include map field identification variables.
  • Compatibility: Verified the accepted forms against Jakarta Persistence semantics, Hibernate ORM, and EclipseLink behavior.
  • Tests: Added shared JPQL/EQL renderer TCK coverage and focused HQL parity coverage.
  • Outcome: Upstreamed from #4282, #4292, and #4289.

Additional upstreamed work includes @IdClass / @ManyToOne repository regression coverage (#4271), renderer cleanup (#4274), and documentation corrections (#4262, #4270).


⭐ Streaming tool calls and reasoning replay across providers

  • Problem: Provider differences in streaming deltas could fragment one logical tool call or discard reasoning state required for a valid tool-result replay.

  • Fix:

    • Merge OpenAI-compatible tool-call deltas by their required index, handling omitted or empty ids and parallel tool calls.
    • Preserve and aggregate reasoning_content / reasoning across streaming chunk merging and message aggregation.
    • Replay Bedrock signed or redacted reasoning blocks before their corresponding toolUse.
    • Replay Anthropic thinking or redacted-thinking blocks before their corresponding tool_use.
  • Scope: OpenAI-compatible providers including DeepSeek and OpenRouter, Amazon Bedrock Converse, and Anthropic.

  • Tests: Covered split and parallel tool calls, empty or omitted ids, streamed reasoning aggregation, next-turn replay, and signed or redacted reasoning blocks.

  • Outcome: Upstreamed from #6373, #6381, #6414, and #6551.

#6424 — Accumulate usage across recursive advisor loops

  • Problem: Framework-controlled recursive advisors reported only the final model call's token usage, losing the cost of earlier tool-calling rounds or validation retries.
  • Fix: Introduced reusable usage-accumulation support and applied it across recursive advisor iterations.
  • Scope: ToolCallingAdvisor call and stream paths, returnDirect responses, and StructuredOutputValidationAdvisor retry loops.
  • Tests: Added coverage for usage arithmetic, cache metrics, streaming subscriptions, tool-call recursion, direct returns, and exhausted validation retries.
  • Outcome: Merged upstream with cumulative usage preserved across every framework-driven model call.

#6035 — Fix recursive tool input schemas by hoisting $defs to root

  • Problem: Spring AI inlined parameter schemas under properties.<param>, while generated $refs still pointed to root-level $defs. Recursive parameter types therefore produced unresolvable references.
  • Fix: Hoist parameter $defs to the wrapper root, reuse structurally equal definitions, rename simple-name collisions, and rewrite peer $refs within the hoisted schema.
  • Scope: Applied symmetrically to JsonSchemaGenerator and McpJsonSchemaGenerator.
  • Tests: Added regression coverage for transitive recursion, duplicate equal definitions, and colliding simple-name definitions with ref rewrites.
  • Outcome: Rebased, refined with the maintainer, and integrated upstream.

Pinned Loading

  1. spring-ai spring-ai Public

    Forked from spring-projects/spring-ai

    An Application Framework for AI Engineering

    Java 1

  2. spring-data-jpa spring-data-jpa Public

    Forked from spring-projects/spring-data-jpa

    Simplifies the development of creating a JPA-based data access layer.

    Java

  3. koog koog Public

    Forked from JetBrains/koog

    Koog is a JVM (Java and Kotlin) framework for building predictable, fault-tolerant and enterprise-ready AI agents across all platforms – from backend services to Android and iOS, JVM, and even in-b…

    Kotlin

  4. spring-data-redis spring-data-redis Public

    Forked from spring-projects/spring-data-redis

    Provides support to increase developer productivity in Java when using Redis, a key-value store. Uses familiar Spring concepts such as a template classes for core API usage and lightweight reposito…

    Java

  5. micrometer micrometer Public

    Forked from micrometer-metrics/micrometer

    An application observability facade for the most popular observability tools. Think SLF4J, but for observability.

    Java