This is an automated email from the ASF dual-hosted git repository.

yasith pushed a commit to branch cybershuttle-staging
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/cybershuttle-staging by this 
push:
     new abcce2a8b8 fix sdk bugs and agent bugs
abcce2a8b8 is described below

commit abcce2a8b8c89a0f70ab10a7fb9f7d923f28408f
Author: yasithdev <[email protected]>
AuthorDate: Tue Apr 8 06:36:59 2025 -0400

    fix sdk bugs and agent bugs
---
 .../airavata_jupyter_magic/__init__.py             | 30 +++++++++++++++-------
 modules/agent-framework/airavata-agent/agent.go    |  4 +--
 modules/agent-framework/airavata-agent/agent.sh    |  2 +-
 3 files changed, 24 insertions(+), 12 deletions(-)

diff --git 
a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata_jupyter_magic/__init__.py
 
b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata_jupyter_magic/__init__.py
index 8910da5a01..4f305cf425 100644
--- 
a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata_jupyter_magic/__init__.py
+++ 
b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata_jupyter_magic/__init__.py
@@ -24,7 +24,7 @@ from .device_auth import DeviceFlowAuthenticator
 # DATA STRUCTURES
 
 
-class InvalidStateError(Exception):
+class InvalidStateError(BaseException):
     pass
 
 
@@ -146,21 +146,21 @@ def is_runtime_ready(access_token: str, rt: RuntimeInfo, 
rt_name: str):
     if pstate in PENDING_STATES:
         return False, f"PROCESS_{pstate.name}"
     if pstate in TERMINAL_STATES:
-        msg = f"Runtime={rt_name} is in state=PROCESS_{pstate.name}"
+        msg = f"Runtime={rt_name} is in state={pstate.name}"
         raise InvalidStateError(msg)
 
     # third, check the state of agent
     url = f"{api_base_url}/api/v1/agent/{rt.agentId}"
     res = requests.get(url)
     code = res.status_code
-    astate = "AGENT_CREATED"
+    astate = "CREATING_WORKSPACE"
     if code == 202:
         data: dict = res.json()
         if data.get("agentUp", False):
-            astate = "READY"
+            astate = "CONNECTED"
     else:
         print(f"[{code}] Runtime status check failed: {res.text}")
-    return astate == "READY", astate
+    return astate == "CONNECTED", astate
 
 
 def get_experiment_state(experiment_id: str, headers: dict) -> 
tuple[ProcessState, str]:
@@ -206,10 +206,22 @@ def get_process_state(experiment_id: str, headers: dict) 
-> tuple[str, ProcessSt
             pid = data.get("processId")
             procs = data.get("processStatuses")
             if procs and len(procs):
+                tMax, wait, busy, done = 0, 0, 0, 0
                 for proc in procs:
-                    ps = ProcessState[proc.get("state")]
-                    if ps > pstate:
-                        pstate = ps
+                    t = int(proc.get("timeOfStateChange"))
+                    s = ProcessState[proc.get("state")]
+                    if t >= tMax:
+                      tMax, busy, done = t, 0, 0
+                    if t == tMax:
+                        wait += s in PENDING_STATES
+                        done += s in TERMINAL_STATES
+                        busy += s not in [*PENDING_STATES, *TERMINAL_STATES]
+                if busy == 0 and done == 0:
+                    pstate = ProcessState.CONFIGURING_WORKSPACE
+                elif wait == 0 and busy == 0:
+                    pstate = ProcessState.COMPLETED
+                else:
+                    pstate = ProcessState.EXECUTING
         else:
             time.sleep(5)
     return pid, pstate
@@ -365,7 +377,7 @@ def wait_until_runtime_ready(access_token: str, rt_name: 
str):
         while True:
             ready, rstate = is_runtime_ready(access_token, rt, rt_name)
             if ready:
-                status.update(f"Connecting to={rt_name}... status=READY")
+                status.update(f"Connecting to={rt_name}... status=CONNECTED")
                 break
             else:
                 status.update(f"Connecting to={rt_name}... status={rstate}")
diff --git a/modules/agent-framework/airavata-agent/agent.go 
b/modules/agent-framework/airavata-agent/agent.go
index 9d8619dd68..bd6461b801 100644
--- a/modules/agent-framework/airavata-agent/agent.go
+++ b/modules/agent-framework/airavata-agent/agent.go
@@ -244,12 +244,12 @@ func createEnv(stream Stream, executionId string, envName 
string, envLibs []stri
 func startJupyterKernel(envName string) int {
        log.Printf("[agent.go] startJupyterKernel() Starting python server in 
env: %s...\n", envName)
        // Create temp file for unix socket
-       log.Fatalf("[agent.go] startJupyterKernel() creating unix socket...\n")
+       log.Printf("[agent.go] startJupyterKernel() creating unix socket...\n")
        tmpFile, err := os.CreateTemp(os.TempDir(), "kernel-*.sock")
        if err != nil {
                log.Fatalf("[agent.go] startJupyterKernel() Failed to create 
unix socket: %v\n", err)
        }
-       log.Fatalf("[agent.go] startJupyterKernel() created unix socket: %s\n", 
tmpFile.Name())
+       log.Printf("[agent.go] startJupyterKernel() created unix socket: %s\n", 
tmpFile.Name())
        defer tmpFile.Close()
        os.Setenv("KERNEL_SOCK", tmpFile.Name())
        // Run command
diff --git a/modules/agent-framework/airavata-agent/agent.sh 
b/modules/agent-framework/airavata-agent/agent.sh
index 6c7e9a82a1..ad9bd24eb5 100755
--- a/modules/agent-framework/airavata-agent/agent.sh
+++ b/modules/agent-framework/airavata-agent/agent.sh
@@ -81,4 +81,4 @@ singularity exec \
   --env MAMBA_ROOT_PREFIX=/scratch \
   --env TMPDIR=/scratch/tmp \
   $CS_HOME/container/$CONTAINER \
-  bash -c "micromamba create -n $AGENT && /opt/airavata-agent --server 
$SERVER:19900 --agent $AGENT --lib $LIBRARIES --pip $PIP"
+  bash -c "micromamba create -n $AGENT && /opt/airavata-agent --server 
\"$SERVER:19900\" --agent \"$AGENT\" --lib \"$LIBRARIES\" --pip \"$PIP\""

Reply via email to