Chatbot / Oria tools¶
API version
Chatbot API: 2.41.7
This catalogue lists tools that are actually attached to the compiled Oria graph. A decorated Python function is not a runtime capability until a specialist agent registers it. The supervisor uses a typed choice request and a graph transition rather than model-facing tools.
Tools receive database repositories, tenant configuration, current user,
language, conversation state and AI clients through ChatbotToolRuntime. The
model does not provide credentials or database connections. Tenant
tool_exclusion settings can remove registered tools at runtime, and MCP
subgraphs can impose a narrower allow-list. Prompt suggestions describe only
supported agents enabled in the tenant configuration.
Agent-to-tool map¶
| Agent | Registered tools |
|---|---|
supervisor |
None; a typed choice selects an enabled specialist |
career_chat_agent |
transfer_to_knowledge_base, get_user_profile_selective_tool, get_document_content_tool, map_jobs_tool, get_jobs_tool, get_trainings_tool, map_skills_tool |
knowledge_base_agent (inside Career Chat) |
search_knowledge_sources, read_knowledge_page |
profile_analysis_agent |
display_user_profile_tool |
task_helper_agent |
task_helper_tool |
opportunities_suggestion_agent |
suggest_opportunities_based_on_objective_tool, search_opportunities_tool, get_objective_tool |
training_finder_agent |
get_user_profile_selective_tool, training_finder_tool, suggest_simulation |
talent_finder_agent |
talent_finder_tool |
person_disambiguation_agent |
person_disambiguation_tool |
All seven specialists also register request_clarification_tool through the shared
interaction middleware. It is exposed only for interactive HTTP chat.
Supervisor routing¶
The supervisor selects one of the seven specialists using the mini profile:
OpenAI Decisions when supported, or structured generation on the configured
provider otherwise. The application validates tenant availability, applies
the existing profile-action-plan destination rule, records active_agent and
returns a graph Command. It does not expose transfer or confirmation tools.
See supervisor routing.
Internal company knowledge¶
transfer_to_knowledge_base¶
Career Chat transfers company-policy and procedure research to a dedicated
Knowledge Base Deep Agent. This argument-free tool only records the handoff.
Selection requires a specific fact about the company or its configured resources
that is needed to answer. Reflective coaching proceeds directly without research;
an unavailable profile alone does not justify a transfer.
The latest user message, recent conversation and tenant context are supplied by
the graph. A supported answer ends the turn unchanged; a miss or failure returns
to Career Chat for a limitation explanation and one contextual follow-up.
Tenant tool_exclusion can disable the transfer, and only one transfer is allowed
per turn. It is also hidden when no enabled RAG chunks or active configured web
sources are available. This check uses no LLM or embedding. Personal profiles
and uploaded chat documents use their own tools. Explaining a documented capability
is a knowledge question, even when the capability handles documents. Retries and
corrections use earlier user messages; a previous assistant answer is not evidence.
search_knowledge_sources¶
The Knowledge Base agent uses this tool to retrieve raw RAG passages and public
pages concurrently. Optional query refines the RAG query within two searches;
the first search reads web entry pages and exposes their allowed links and section
titles. Links include allowed paths and bounded nearby context; same-page utility
links are omitted in favor of section handles. A contextual retry uses a
self-contained query. Refinement reuses retrieved web evidence. The Deep Agent owns
the final synthesis and must distinguish the requested operation from related topics.
read_knowledge_page¶
The agent selects an opaque page_id from discovered links. Optional section_id
and offset select a listed heading or continue a bounded excerpt. Previously
fetched pages are reused without another HTTP request or RAG search. The tool
enforces the configured origins/paths and the shared page/depth/time limits.
Unavailable pages remain distinguishable from missing evidence; navigation hints
alone cannot substantiate an answer.
Search/read results expose remaining page and read capacity through web_budget.
The agent can use another plausible lead after a tangential result, within the
same four model invocations and unchanged page/depth/time limits.
See Knowledge Base research for configuration and guarantees.
User and conversation context¶
get_user_profile_selective_tool¶
Inputs are eight boolean selectors for basic information, skills/gaps,
objectives, experiences, departments/interests, bookmarks, training history and
mandatory training IDs. Call it only when profile information is needed for the
current request, with at least one relevant selector set to true. An all-false
selection returns an error, not a names-only profile. Successful calls read the
current standardized user already in runtime context and return available
first/last names, adding only requested sections to control model tokens. A
missing application user ID is an explicit error; the tool has no side effect.
Before selecting the tool, the agent must identify a useful category and explicitly
enable it; omitted selectors default to false. If no category is needed, it
responds directly. An unavailable company knowledge source does not itself justify
a lookup: need_basic_info=true may check relevant location context, but a profile
cannot establish company policy. Empty calls are not a transition to a final answer.
Career Chat removes this tool before model action selection when the preloaded
profile is missing, null or empty. Repeating the lookup cannot reload that fixed
request context. Profile-retrieval instructions do not override this limitation:
the assistant continues with available conversation context without inventing
profile facts or automatically switching to an uploaded document. It mentions the
limitation only when relevant, without opening an interaction merely to retry it.
A present profile with empty skills, objectives or other categories remains
available. Availability is checked from each request's context, so a later request
with a loaded profile can use the tool normally.
An explicit conversational closing or pause without a new request goes directly to a brief final acknowledgment. Action selection must not retrieve profile information, call another tool or resume an earlier task for that closing. This is the first decision in the Career Chat prompt and in private action selection, ahead of retrieval guidance. "I want to pause here" ends the current conversation; a question about company career-break policy still requests research. A thank-you followed by a new question does not close that request. This remains model-driven prompt guidance, without an additional classifier call or a deterministic guarantee that every closure will be recognized.
get_document_content_tool¶
Takes file_name and an optional conversation_id; omission uses the current
conversation. It reads the extracted document from the PostgreSQL document
repository or MongoDB Documents collection using both fields as scope. The
complete stored document is returned, {error: "Document not found."} signals
a miss, and missing database/conversation context raises an explicit error.
map_jobs_tool¶
Takes a list of free-text job titles. Each title is embedded/searched against
the active job repository at threshold 0.91, and only the closest result is
retained as original title, mapped title and job code. Individual misses remain
in the JSON result; infrastructure failure marks the tool message as an error
only when every requested mapping failed.
get_jobs_tool¶
Takes job codes produced by map_jobs_tool. PostgreSQL fetches them in one
repository call; MongoDB queries Jobs and projects job code, title,
description, ID, creation date and skills. Results are serialized into a
tool-call-correlated ToolMessage; empty input and complete backend failure are
reported as errors.
map_skills_tool¶
Takes optional free-text skill labels and runs the shared Skills Library mapping
against MongoDB or PostgresSkillSearchRepository. It returns original label,
best normalized label and skill code for usable matches. There is no
persistence side effect.
get_trainings_tool¶
Takes ordered training_ids plus optional card title/subtitle. It fetches the
documents from MongoDB or PostgreSQL, removes embeddings, projects presentation
fields and rebuilds results in the caller's ID order. Missing IDs are skipped;
the tool writes suggested_trainings_message_data into graph state and returns
it directly for UI rendering.
get_objective_tool¶
Takes an optional title and include_archived=false. It reads objectives from
the current user, keeps only status=current by default, auto-selects the sole
remaining objective, asks for disambiguation when several remain, or resolves a
provided title through semantic closest-objective matching for noninteractive callers.
Interactive chat accepts an exact unique title or pauses with a snapshot of the
remaining candidates; an ambiguous title never silently selects the closest one. The selected JSON,
a no-objective/not-found message, or a sanitized infrastructure error is
returned without mutation.
Opportunity discovery¶
search_opportunities_tool¶
Inputs are the latest natural-language request and a show_more_opportunities
flag that must reflect an explicit request for more. The tool can classify
profile-relative intent and enrich the query with current-user facts, then uses
a strict model schema to extract OpportunitySearchCriteria. The deterministic
core applies configured JOM hard filters, structured criteria, full-text/vector
search and user-profile scoring through the active repositories.
Previously returned IDs are excluded only for a genuine “show more” turn and new IDs are stored in graph result state. Successful results become structured opportunity cards with localized rationales. An empty search in HTTP chat pauses with a question about which criteria to change; completed search work is cached. It never substitutes unfiltered profile matches. Noninteractive callers receive the localized no-result message. Unexpected errors produce a stable error-status tool message.
suggest_opportunities_based_on_objective_tool¶
Takes objective_id, the current user message and the explicit “show more”
flag. It finds that objective in the current profile, extracts its skills and
maps/searches relevant opportunities (or invokes the MongoDB objective
recommendation workflow). Already returned opportunities are removed, up to the
presentation limit are formatted with objective-specific rationales and the new
IDs are tracked. Missing objectives/results return localized business messages;
infrastructure failures are sanitized.
Training and simulation¶
training_finder_tool¶
Inputs include the natural-language query, required is_learning_plan, explicit
“show more”, selective profile flags, optional preloaded user context and plan
duration. It merges conversation exclusions with explicit exclusions and expands
them to related parent/child training IDs. It loads requested user sections,
durable preferences and recent conversation history; learning plans
automatically request role, skills, objectives and department context.
For plans, the agent delegates incomplete scope to the tool instead of asking
its own preliminary questions. A scope assessment can request clarification
before search. HTTP chat
uses one persisted LangGraph interrupt with separate questions, a grouped
answer/skip submission or whole-request cancellation;
see the frontend interaction contract.
Completed preparation and scope decisions are cached across node restarts. Compatible
OpenAI mini uses independent decisions for target, background, available time,
preferences and an explicit request to skip clarification. The application allows
the plan when at least two dimensions are known or the user explicitly skips
clarification. A general/no-specialization preference counts as answered; plan
duration alone does not count as available time. Other chatbot requests also
pass a search-or-clarify decision. On the native path, only a request needing
clarification generates a structured mini question list (up to three for a
plan, one for an uninterpretable search). Other providers and unsupported models
retain their existing combined structured mini calls. Both paths use the same
question rules: one missing dimension per question, with target, background and
available time prioritized when nothing is known. The native path supplies only
the first three missing dimensions in that priority order to the question writer;
already supplied preferences remain available as context. A time question must
not include an additional request for preferences. Fewer questions remain valid.
These optional checks
preserve search availability on failure without retrying through another provider;
cancellation still propagates. Identifier-only callers skip the search-or-clarify
check. The search
service resolves filters, executes lexical/vector retrieval and returns results
directly in weighted RRF order; there is no Cohere rerank. Plan mode additionally
builds the time-boxed learning-plan presentation without changing that order.
Results update suggested_trainings_message_data and returned-ID state; misses
receive a localized fallback and unexpected failures a stable error status.
Search does not generate individual rationales and trainingSuggestionList
items have no rationale field. Collection titles, subtitles and learning-plan
phase descriptions remain. Request an explanation for one selected learning
through Training Matching, optionally passing
the user's search as search_query. rationaleContext retains the original and
resolved queries for this purpose.
suggest_simulation¶
Takes the practice request and optional counterpart name. It parses the desired
scenario, disambiguates a named person against tenant users at threshold 0.55,
maps relevant skill names against the skill catalog and generates a strict
structured role-play scenario. The returned direct Command contains the
simulation card/state used to start the simulation; unresolved optional people
do not manufacture an identity.
Expected outcomes describe observable results of the conversation. When an outcome involves understanding, it specifies a visible demonstration, such as the counterpart restating an impact or explicitly confirming a shared interpretation. No fixed wording or additional objective is required.
Each generated skill describes one coherent professional capability. Related behaviors can share a title, such as "Listening and responding to defensiveness"; conjunctions are allowed. Independent capabilities must remain separate skills.
Difficulty and estimated duration primarily reflect the actual conversation: the counterpart's cooperation, stakes, competing constraints and required reasoning or negotiation. Outcome and criterion counts are secondary signals; time ranges are approximate guidance. Clarifying scope, a deadline and next steps with a cooperative colleague may have three outcomes and three criteria while remaining a Beginner scenario of about 10 minutes.
Talent and profile analysis¶
talent_finder_tool¶
Takes a readable natural-language request, a structured TalentSearchIntent
and explicit “show more”. Criterion groups are ANDed; values inside a criterion
use its any/all operator. Dedicated classification, location, work-arrangement,
skill, role, employer and department fields compile deterministically into the
active MongoDB/PostgreSQL search. Education, certification and experience
duration are intentionally ignored rather than remapped.
The current user and previously returned IDs are excluded. Results include the needed experience, department, classification, location, working-mode and skill fields, and their IDs are tracked for pagination. A no-result response is generated from the readable query without inventing candidates; unexpected failures use a stable error tool message.
Candidate rationales describe only supported matches. When no search criterion is supported by the supplied candidate data, they may invite a focused discussion or review of work examples or other relevant evidence. Work samples are optional; the evaluation judge accepts a concrete discussion-based assessment without them. Neither route establishes skills, experience, proficiency or a match in advance.
person_disambiguation_tool¶
Takes person_name, searches tenant users other than the current user and
returns candidates above the 0.55 disambiguation threshold with display names
and internal IDs. It is read-only and lets the agent/user choose when multiple
people remain.
display_user_profile_tool¶
Takes no model-controlled business parameter. It normalizes the current profile, builds bounded prompt evidence and concurrently generates localized analysis copy, up to six skill-gap objectives, and current-role alignment. The alignment prefers the persisted JPM skill score; if absent and eligible, a per-user/job lock permits one JPM recalculation before falling back to an LLM estimate.
The result is a structured profile-analysis card containing narrative, alignment and prioritized development topics. Objective generation can time out without losing the rest of the card, and copy generation has a deterministic profile-data fallback. Missing profile data and unrecoverable failures return distinct stable error-status tool messages.
task_helper_tool¶
The conversation must identify a concrete task and desired outcome before this
tool is called. An unspecified task requires one concise clarification question.
Interactive HTTP requests deliver the missing essential details through
request_clarification_tool before invoking the guidance tool. Noninteractive
callers retain conversational clarification. Neither path guesses missing facts.
Takes the professional user_question plus injected state. It builds a
tenant-aware system prompt using bot/company names and specialist instructions,
selects a 1,000/1,400/1,800-token budget from question length and calls the
configured model at low temperature. Markdown emoji codes are normalized to
Unicode and the answer is returned directly. Missing AI context yields general
guidance; model failure yields a sanitized retry message.
Guidance is proportionate to the task. After refusing an unsupported outcome
guarantee, the tool provides a few concrete, safe, immediately usable actions for
the known task before a useful follow-up. Their number is not fixed: judge them
by relevance, concision and proportion to the request. For a presentation, it may
suggest selecting verifiable accomplishments and explaining their context,
contribution and results without
promising promotion or inventing assessment criteria. End with one to four useful
follow-up questions, presented clearly and naturally. The Follow-up Questions
heading is optional for every response, including longer guides. Optional
personalization does not block useful initial guidance.
Emojis provide optional visual markers selected for the meaning of the adjacent
text: for example, 📄 for a document, 💡 for a tip, 📅 for scheduling,
📊 for metrics and ⚠️ for a risk. These are non-exhaustive examples, not an
allowlist or mandatory placements; 📌 can also highlight an important tip and
🧩 can introduce a reusable template. Other Unicode emojis are acceptable when
their meaning fits the content and they remain clear and professional. Numbered or bulleted steps
need no emoji on every item, while repeated ✅ markers remain acceptable for a
clear checklist. No fixed count or quota applies. Markers must not imply that
proposed actions are complete, risks are resolved or results are guaranteed.
Readability and useful guidance take priority over formatting preferences.
Advice must remain grounded and must not guarantee a promotion or other career
outcome.
MCP clients receive a separate external tool set, documented under MCP Server. Internal tool behavior is described in the LangGraph tool guides.
The generated chatbot HTTP reference is the authoritative source for parameters, schemas, responses and examples.
request_clarification_tool¶
Specialist agents use this shared tool for essential clarification before a
business operation. It returns the generic interaction HTTP output and accepts
a questions list with text, single-select or multi-select replies through the
grouped resume request. The model sets input_type, grounded options and
allow_free_text; the backend assigns question-local option IDs. Agents keep their existing
semantic profiles (mini for Career Chat/Task Helper, large for other
specialists); no new classifier is introduced. The shared delivery middleware
makes clarification a tool action in both JSON and SSE and rejects parallel tool
calls before execution in interactive mode.
Every question supports skip, which advances only that frontend step. Skipped
questions are not asked again automatically. Skipping a required selection ends
the targeted request without choosing an object. Finite topic, document/profile and action-plan
choices use structured option IDs preserved in the checkpoint. Closed targets
remain single-select; compatible topics may be multi-select, with an alternative
text answer when allowed. Invalid IDs or cardinality are rejected before graph
resumption, leaving the same pause pending. No number/label parsing is performed. Ordinary
coaching questions, role-play dialogue and closing invitations are not interruptions.
Interruptions are reserved for blocking gaps: agents reuse known context, group
indispensable questions, and proceed as soon as the reply is usable. Optional tone,
format, duration or personalization preferences do not trigger another scoping round.
Person and objective lookup tools own their candidate snapshots and selections. Person confirmation retains the exact identifier for simulation; in the main graph, a confirmed choice returns to the supervisor to continue the original request. Opportunity/talent searches cache completed search work before asking which criteria to change. They preserve show-more exclusions and never silently replace a failed filtered search with profile suggestions. Cancellation ends the workflow without another model call. See the HTTP contract.