Skip to content

feat(agent): classifier tool with jev and openai decisions providers - #1143

Draft
ionut-mihalache-uipath wants to merge 2 commits into
mainfrom
ccr-2add1d15-l3b9id
Draft

ionut-mihalache-uipath wants to merge 2 commits into
mainfrom
ccr-2add1d15-l3b9id

Conversation

@ionut-mihalache-uipath

Copy link
Copy Markdown
Contributor

Summary

The Jev classifier internal tool becomes the classifier tool. The provider of its model sets the shapes of its arguments:

  • typesafe (Jev): a state and choice / score / noul questions, unchanged.
  • openai (Decisions API):
    • An input: text, or an object or list sent as its JSON text.
    • Optional images: job attachments, downloaded and sent as data URLs.
    • Choice / score / predicate questions.
    • Answers are keyed by question name in the Decisions shapes. A refusal is a tool error the agent sees.

The shared part is provider-agnostic: argument modes, startup checks, LLM vs configuration errors, and the output schema fallback. Each provider supplies its question models, request, answer checks and error parsing. Both providers call the LLM Gateway's /decisions route through uipath-llm-client's UiPathJevClient and UiPathDecisionsClient.

Requires uipath>=2.14.37 and uipath-llm-client / uipath-langchain-client>=1.22.0. Bumps the package to 0.18.33.

Testing

  • test_classifier_tool.py and the new test_classifier_decisions.py: 114 classifier tests pass. The full suite passes locally.
  • Ran an agent end to end with one tool per provider (jev-1.13.0, gpt-6-luna): both returned 200 from /decisions.
  • An image passed as a job attachment was sent with the OpenAI request and changed the answers: an order-number predicate went from 0.02 to 1.0, and the amount went from unknown to 49.00.

uv.lock still has to be regenerated once uipath 2.14.37 and uipath-llm-client 1.22.0 are published.

🤖 Generated with Claude Code

claude and others added 2 commits October 9, 2026 18:29
The Jev classifier internal tool becomes the `classifier` tool, whose model's
provider sets the shapes of its arguments:

- typesafe (Jev): a `state` and choice / score / noul questions, unchanged.
- openai (Decisions API): an `input` (text, or an object or list sent as its
  JSON text) with optional `images` (job attachments sent as data URLs), and
  choice / score / predicate questions. Answers are keyed by question name in
  the Decisions shapes; a refusal is a tool error the agent sees.

The shared part (argument modes, startup checks, LLM vs configuration errors,
output schema fallback) is provider-agnostic; each provider supplies its
question models, request, answer checks and error parsing. The Decisions call
goes through the LLM Gateway OpenAI passthrough with the `decisions` API flavor.

Requires uipath 2.14.37 (classifier tool models).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F6qDf7FQSgba7JrYH4j6jw
…ns route

The LLM Gateway serves OpenAI's Decisions API and TypeSafe's Jev on a raw
vendor decisions route. uipath-llm-client 1.22.0 adds UiPathDecisionsClient
for it and moves UiPathJevClient there, so the classifier tool uses that
client instead of its own, which posted to the completions route with an
API flavor the gateway does not serve.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Oct 9, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 90%)

See analysis details on SonarQube Cloud

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants