MCPcopy Index your code
hub / github.com/epam/ai-dial-core

github.com/epam/ai-dial-core @0.45.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.45.0 ↗ · + Follow
4,304 symbols 21,132 edges 625 files 325 documented · 8% updated 1d ago0.44.6 · 2026-07-06★ 65771 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

DIAL Core

    <a href="https://dialx.ai/">
      <img src="https://dialx.ai/logo/dialx_logo.svg" alt="About DIALX">
    </a>

Discord

Overview

[!NOTE] HTTP Proxy provides unified API to different chat completion and embedding models and applications. Written in Java 21 and built on top of Eclipse Vert.x.

ai-dial-core

Read more about the DIAL Core


Build 🏗

DIAL Core has a dependency on GitHub packages of JClouds. Github doesn't provide anonymous access to packages.

That requires to pass credentials GitHub for access to published JClouds packages. See the code snippet below:

repositories {
        maven {
            url = uri("https://maven.pkg.github.com/epam/jclouds")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("GPR_USERNAME")
                password = project.findProperty("gpr.key") ?: System.getenv("GPR_PASSWORD")
            }
        }
        mavenCentral()
    }

[!IMPORTANT] You should set env variables GPR_USERNAME and GPR_PASSWORD to valid values, where GPR_USERNAME - GitHub username and GPR_PASSWORD - GitHub personal access token.

[!IMPORTANT] The access token requires the permission read:packages.

See more details here to generate personal access token in GitHub.

Build the project with Gradle and Java 21:

./gradlew build

Run ▶️

Run the project with Gradle:

./gradlew :server:run

Or run com.epam.aidial.core.server.AiDial class from your favorite IDE.


Helm Deployment

You have the option to deploy the DIAL Core on the Kubernetes cluster by utilizing an umbrella dial Helm chart, which also deploys other DIAL components. Alternatively, you can use dial-core Helm chart to deploy just Core.

[!NOTE] Refer to Examples for guidelines.

In any case, in your Helm values file, it is necessary to provide application's configurations described in the Configuration section.


Configuration ⚙️

Static settings

[!NOTE] Static settings are used on startup and cannot be changed while application is running. Refer to example to view the example configuration file.

Priority order:

  1. Environment variables with extra "aidial." prefix. E.g. "aidial.server.port", "aidial.config.files".
  2. File specified in "AIDIAL_SETTINGS" environment variable.
  3. Default resource file: src/main/resources/aidial.settings.json.
Setting Default Required Description
config.files aidial.config.json No List of paths to dynamic settings. Refer to example of the file with dynamic settings.
config.reload 60000 No Config reload interval in milliseconds.
vertx.* - No Vertx settings. Refer to vertx.io to learn more.
server.* - No Vertx HTTP server settings for incoming requests. Refer to HTTP server options to learn more.
client.* - No Vertx HTTP client settings for outbound requests. Refer to HTTP client options to learn more.
webSocketClient.* - No Vertx web socket client settings for outbound requests. Refer to WebSocket client options to learn more.
invitations.ttlInSeconds 259200 No Invitation time to live in seconds.
perRequestApiKey.ttl 1800 No The TTL in seconds of per request API key
asyncTaskExecutor.useVirtualThreads true No The flag determines if virtual threads are used to run blocking tasks or platform threads.
config.jsonMergeStrategy.overwriteArrays false No Specifies a merging strategy for JSON arrays. If it's set to true, arrays will be overwritten. Otherwise, they will be concatenated.
apiKeyValidation.proxyCount 0 No The count of trusted proxies between the client and DIAL Core server. See selecting an IP address in HTTP header X-Forwarded-For for more details. The default value means there are no proxies.

Identity Providers Configurations

Setting Default Required Description
identityProviders - Yes Map of identity providers. Note: At least one identity provider must be provided. Refer to examples to view available providers. Refer to IDP Configuration to view guidelines for configuring supported providers.
identityProviders - Yes Map of identity providers. Note: At least one identity provider must be provided. Refer to examples to view available providers. Refer to IDP Configuration to view guidelines for configuring supported providers.
identityProviders.*.jwksUrl - Optional Url to jwks provider. Required if disabledVerifyJwt is set to false. Note: Either jwksUrl or userInfoEndpoint must be provided.
identityProviders.*.userInfoEndpoint - Optional Url to user info endpoint. Note: Either jwksUrl or userInfoEndpoint must be provided or disableJwtVerification is unset. Refer to Google example.
identityProviders.*.rolePath - Yes Path(s) to the claim user roles in JWT token or user info response, e.g. resource_access.chatbot-ui.roles or just roles. Can be single String or Array of Strings. Refer to IDP Configuration to view guidelines for configuring supported providers.
identityProviders.*.projectPath - No Path(s) to the claim in JWT token or user info response, e.g. azp, aud or some.path.client from which project name can be taken. Can be single String. Refer to IDP Configuration to view guidelines for configuring supported providers.
identityProviders.*.rolesDelimiter - No Delimiter to split roles into array in case when list of roles presented as single String. e.g. "rolesDelimiter": " "
identityProviders.*.loggingKey - No User information to search in claims of JWT token. email or sub should be sufficient in most cases. Note: email might be unavailable for some IDPs. Please check your IDP documentation in this case.
identityProviders.*.loggingSalt - No Salt to hash user information for logging.
identityProviders.*.positiveCacheExpirationMs 600000 No How long to retain JWKS response in the cache in case of successfull response.

Extension points exported contracts — how you extend this code

Controller (Interface)
Common interface for HTTP controllers. Note. The interface must extends Serializable for exposing inte [43 implementers]
server/src/main/java/com/epam/aidial/core/server/controller/Controller.java
ContentEncryptionKeyManager (Interface)
Manages creation and retrieval of decrypted Content Encryption Keys (CEKs) used to encrypt/decrypt sensitive data. I [5 …
credentials/src/main/java/com/epam/aidial/core/credentials/encryption/ContentEncryptionKeyManager.java
Lock (Interface)
(no doc) [15 implementers]
storage/src/main/java/com/epam/aidial/core/storage/service/LockService.java
DownloadFileFunction (Interface)
(no doc) [13 implementers]
server/src/main/java/com/epam/aidial/core/server/service/codeinterpreter/CodeInterpreterClient.java
ResourceCredentialsFactory (Interface)
(no doc) [8 implementers]
credentials/src/main/java/com/epam/aidial/core/credentials/factory/ResourceCredentialsFactory.java
CredentialProvider (Interface)
(no doc) [8 implementers]
storage/src/main/java/com/epam/aidial/core/storage/blobstore/credential/CredentialProvider.java
RequestObject (Interface)
Common interface for Chat Completions API and Responses API requests. [3 implementers]
server/src/main/java/com/epam/aidial/core/server/function/request/RequestObject.java
TokenRefreshStrategy (Interface)
(no doc) [6 implementers]
credentials/src/main/java/com/epam/aidial/core/credentials/service/token/TokenRefreshStrategy.java

Core symbols most depended-on inside this repo

get
called by 1255
server/src/main/java/com/epam/aidial/core/server/config/ConfigStore.java
of
called by 1241
storage/src/main/java/com/epam/aidial/core/storage/resource/ResourceTypes.java
put
called by 407
server/src/main/java/com/epam/aidial/core/server/controller/ControllerSelector.java
respond
called by 258
server/src/main/java/com/epam/aidial/core/server/controller/BaseDeploymentPostController.java
add
called by 225
server/src/main/java/com/epam/aidial/core/server/limiter/RateBucket.java
map
called by 217
server/src/test/java/com/epam/aidial/core/server/TestWebServer.java
submit
called by 192
server/src/main/java/com/epam/aidial/core/server/vertx/AsyncTaskExecutor.java
getUrl
called by 176
server/src/main/java/com/epam/aidial/core/server/data/ResourceUrl.java

Shape

Method 3,576
Class 662
Enum 37
Interface 29

Languages

Java100%

Modules by API surface

storage/src/main/java/com/epam/aidial/core/storage/service/ResourceService.java71 symbols
server/src/test/java/com/epam/aidial/core/server/ToolSetApiTest.java64 symbols
server/src/main/java/com/epam/aidial/core/server/config/MergedConfigStore.java52 symbols
server/src/test/java/com/epam/aidial/core/server/security/IdentityProviderTest.java47 symbols
server/src/test/java/com/epam/aidial/core/server/controller/ControllerSelectorTest.java44 symbols
server/src/test/java/com/epam/aidial/core/server/ConfigEntityWriteApiTest.java39 symbols
server/src/test/java/com/epam/aidial/core/server/ShareApiTest.java35 symbols
server/src/test/java/com/epam/aidial/core/server/PublicationApiTest.java35 symbols
server/src/main/java/com/epam/aidial/core/server/service/PublicationService.java35 symbols
server/src/main/java/com/epam/aidial/core/server/service/ApplicationService.java35 symbols
server/src/main/java/com/epam/aidial/core/server/controller/ConfigResourceController.java34 symbols
server/src/test/java/com/epam/aidial/core/server/config/SecretFieldProcessorTest.java33 symbols

For agents

$ claude mcp add ai-dial-core \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page