public CodeInterpreterSession openSession()

in server/src/main/java/com/epam/aidial/core/server/service/codeinterpreter/CodeInterpreterService.java [150:191]


    public CodeInterpreterSession openSession(ProxyContext context, String sessionId) {
        verifyActive();

        if (sessionId == null) {
            sessionId = idGenerator.get();
        }

        ResourceDescriptor resource = sessionResource(context, sessionId);
        CodeInterpreterSession session = new CodeInterpreterSession();
        session.setSessionId(sessionId);
        session.setDeploymentId(idGenerator.get());
        boolean cleanup = false;

        try (LockService.Lock lock = resourceService.lockResource(resource)) {
            String json = resourceService.getResource(resource, EtagHeader.ANY, false);
            CodeInterpreterSession existing = convertToObject(json, CodeInterpreterSession.class);
            if (existing != null) {
                throw new IllegalArgumentException("Session already exists: " + session.getSessionId());
            }

            cleanup = true;
            session.setUsedAt(System.currentTimeMillis());
            activeSessions.add(session.getUsedAt() + sessionTtl, resource.getUrl());
            resourceService.putResource(resource, convertToString(session), EtagHeader.ANY, false);

            String deploymentUrl = operatorService.createCodeInterpreterDeployment(session.getDeploymentId(), sessionImage);
            session.setDeploymentUrl(deploymentUrl);
            session.setUsedAt(System.currentTimeMillis());

            activeSessions.add(session.getUsedAt() + sessionTtl, resource.getUrl());
            resourceService.putResource(resource, convertToString(session), EtagHeader.ANY, false);
        } catch (Throwable error) {
            if (cleanup) {
                Predicate<CodeInterpreterSession> ifMatch = candidate -> Objects.equals(candidate.getDeploymentId(), session.getDeploymentId());
                cleanupSession(resource, ifMatch);
            }

            throw error;
        }

        return session;
    }