|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROJECT_DIR="/storage/BA73-022B/bd/bd-model-genaretions" |
|
|
LOG_FILE="$PROJECT_DIR/logs/actions.log" |
|
|
MEMORY_FILE="$PROJECT_DIR/memory.txt" |
|
|
REQUESTS_DIR="$PROJECT_DIR/requests" |
|
|
RESPONSES_DIR="$PROJECT_DIR/responses" |
|
|
DATA_DIR="$PROJECT_DIR/data" |
|
|
STATUS_DIR="$PROJECT_DIR/status" |
|
|
|
|
|
|
|
|
TOGETHER_API_KEY="07f08ca73c50496a3406ff621912254a67370d576822f1921f77eed47e649545" |
|
|
COHERE_API_KEY="rvpLjkuzZPsoHGeIxqQxttTTIt4IxGUS5FOINU4L" |
|
|
GEMINI_API_KEY="AIzaSyAQNxQU0WnegEnMfP6LCwkVw-PUtR11qaI" |
|
|
|
|
|
|
|
|
echo "Initializing project directories..." |
|
|
for dir in "$PROJECT_DIR" "$DATA_DIR" "$REQUESTS_DIR" "$RESPONSES_DIR" "$PROJECT_DIR/logs" "$STATUS_DIR"; do |
|
|
mkdir -p "$dir" |
|
|
if [ $? -ne 0 ]; then |
|
|
echo -e "\033[1;31mError: Failed to create directory $dir\033[0m" |
|
|
exit 1 |
|
|
fi |
|
|
done |
|
|
|
|
|
touch "$LOG_FILE" "$MEMORY_FILE" |
|
|
if [ ! -f "$LOG_FILE" ] || [ ! -f "$MEMORY_FILE" ]; then |
|
|
echo -e "\033[1;31mError: Failed to create log or memory file\033[0m" |
|
|
exit 1 |
|
|
fi |
|
|
echo "[$(date)] Starting Bengali language model generation" >> "$LOG_FILE" |
|
|
|
|
|
|
|
|
|
|
|
function set_memory { |
|
|
local key="$1" |
|
|
local value="$2" |
|
|
grep -v "^$key=" "$MEMORY_FILE" > "$MEMORY_FILE.tmp" && mv "$MEMORY_FILE.tmp" "$MEMORY_FILE" |
|
|
echo "$key=$value" >> "$MEMORY_FILE" |
|
|
} |
|
|
|
|
|
function get_memory { |
|
|
local key="$1" |
|
|
local value=$(grep "^$key=" "$MEMORY_FILE" | cut -d'=' -f2) |
|
|
echo "${value:-false}" |
|
|
} |
|
|
|
|
|
|
|
|
function log_action { |
|
|
local agent_id="$1" |
|
|
local action="$2" |
|
|
echo "[$(date)] [Agent $agent_id] $action" >> "$LOG_FILE" |
|
|
} |
|
|
|
|
|
|
|
|
function set_status { |
|
|
local agent_id="$1" |
|
|
local status="$2" |
|
|
echo "$status" > "$STATUS_DIR/agent$agent_id.status" |
|
|
} |
|
|
|
|
|
|
|
|
function run_python { |
|
|
local code="$1" |
|
|
log_action "Tool" "Running Python code: $code" |
|
|
local output=$(python3 -c "$code" 2>> "$LOG_FILE") |
|
|
local exit_code=$? |
|
|
if [ $exit_code -ne 0 ]; then |
|
|
log_action "Tool" "Python execution failed with exit code $exit_code" |
|
|
return $exit_code |
|
|
fi |
|
|
echo "$output" |
|
|
} |
|
|
|
|
|
function run_node { |
|
|
local code="$1" |
|
|
log_action "Tool" "Running Node.js code: $code" |
|
|
local output=$(node -e "$code" 2>> "$LOG_FILE") |
|
|
local exit_code=$? |
|
|
if [ $exit_code -ne 0 ]; then |
|
|
log_action "Tool" "Node.js execution failed with exit code $exit_code" |
|
|
return $exit_code |
|
|
fi |
|
|
echo "$output" |
|
|
} |
|
|
|
|
|
|
|
|
function call_together_api { |
|
|
local prompt="$1" |
|
|
curl -s -m 10 -X POST "https://api.together.ai/v1/completions" \ |
|
|
-H "Content-Type: application/json" \ |
|
|
-H "Authorization: Bearer $TOGETHER_API_KEY" \ |
|
|
-d "{\"prompt\": \"$prompt\", \"model\": \"some_model\", \"max_tokens\": 100}" |
|
|
} |
|
|
|
|
|
function call_cohere_api { |
|
|
local prompt="$1" |
|
|
curl -s -m 10 -X POST "https://api.cohere.ai/generate" \ |
|
|
-H "Content-Type: application/json" \ |
|
|
-H "Authorization: Bearer $COHERE_API_KEY" \ |
|
|
-d "{\"prompt\": \"$prompt\", \"max_tokens\": 100}" |
|
|
} |
|
|
|
|
|
function call_gemini_api { |
|
|
local prompt="$1" |
|
|
curl -s -m 10 -X POST "https://api.gemini.ai/v1/completions" \ |
|
|
-H "Content-Type: application/json" \ |
|
|
-H "Authorization: Bearer $GEMINI_API_KEY" \ |
|
|
-d "{\"prompt\": \"$prompt\", \"model\": \"some_model\"}" |
|
|
} |
|
|
|
|
|
function generate_text { |
|
|
local prompt="$1" |
|
|
local api="$2" |
|
|
local attempts=3 |
|
|
for ((i=1; i<=attempts; i++)); do |
|
|
local response text |
|
|
case "$api" in |
|
|
together) |
|
|
response=$(call_together_api "$prompt") |
|
|
text=$(echo "$response" | jq -r '.choices[0].text' 2>/dev/null) |
|
|
;; |
|
|
cohere) |
|
|
response=$(call_cohere_api "$prompt") |
|
|
text=$(echo "$response" | jq -r '.generations[0].text' 2>/dev/null) |
|
|
;; |
|
|
gemini) |
|
|
response=$(call_gemini_api "$prompt") |
|
|
text=$(echo "$response" | jq -r '.choices[0].text' 2>/dev/null) |
|
|
;; |
|
|
*) |
|
|
text="Unknown API" |
|
|
;; |
|
|
esac |
|
|
if [ -n "$text" ] && [ "$text" != "null" ] && [[ ! "$text" =~ "Error" ]]; then |
|
|
echo "$text" |
|
|
return 0 |
|
|
fi |
|
|
log_action "API" "Attempt $i failed for $api API, retrying..." |
|
|
sleep 2 |
|
|
done |
|
|
log_action "API" "Failed to generate text with $api after $attempts attempts" |
|
|
return 1 |
|
|
} |
|
|
|
|
|
|
|
|
function request_human_input { |
|
|
local agent_id="$1" |
|
|
local request="$2" |
|
|
log_action "$agent_id" "Requesting human input: $request" |
|
|
set_status "$agent_id" "Waiting for human input" |
|
|
echo "$request" > "$REQUESTS_DIR/agent$agent_id.txt" |
|
|
while [ ! -f "$RESPONSES_DIR/agent$agent_id.txt" ]; do |
|
|
sleep 1 |
|
|
done |
|
|
local response=$(cat "$RESPONSES_DIR/agent$agent_id.txt") |
|
|
rm "$RESPONSES_DIR/agent$agent_id.txt" |
|
|
log_action "$agent_id" "Received human response: $response" |
|
|
set_status "$agent_id" "Processing human input" |
|
|
echo "$response" |
|
|
} |
|
|
|
|
|
|
|
|
function collect_data { |
|
|
set_status 1 "Generating Bengali text via API" |
|
|
local prompt="Generate a sample of Bengali text for language model training." |
|
|
local text=$(generate_text "$prompt" "together") |
|
|
if [ $? -eq 0 ]; then |
|
|
set_status 1 "Saving data to file" |
|
|
echo "$text" > "$DATA_DIR/bengali_text.txt" |
|
|
if [ $? -ne 0 ]; then |
|
|
set_status 1 "Error: Failed to save data" |
|
|
log_action 1 "Failed to write to $DATA_DIR/bengali_text.txt" |
|
|
return 1 |
|
|
fi |
|
|
log_action 1 "Data saved to $DATA_DIR/bengali_text.txt" |
|
|
set_memory "data_collected" "true" |
|
|
else |
|
|
set_status 1 "API error" |
|
|
log_action 1 "Failed to collect data due to API error" |
|
|
return 1 |
|
|
fi |
|
|
set_status 1 "Data collection completed" |
|
|
} |
|
|
|
|
|
function preprocess_data { |
|
|
set_status 2 "Waiting for data collection" |
|
|
while [ "$(get_memory 'data_collected')" != "true" ]; do |
|
|
sleep 1 |
|
|
done |
|
|
set_status 2 "Analyzing data" |
|
|
if [ ! -f "$DATA_DIR/bengali_text.txt" ]; then |
|
|
set_status 2 "Error: Data file missing" |
|
|
log_action 2 "Error: No data file found at $DATA_DIR/bengali_text.txt" |
|
|
return 1 |
|
|
fi |
|
|
local output=$(run_python "with open('$DATA_DIR/bengali_text.txt', 'r') as f: text = f.read(); print(f'Text length: {len(text)} characters')") |
|
|
if [ $? -ne 0 ]; then |
|
|
set_status 2 "Error: Analysis failed" |
|
|
log_action 2 "Preprocessing analysis failed" |
|
|
return 1 |
|
|
fi |
|
|
log_action 2 "Analysis result: $output" |
|
|
set_status 2 "Awaiting human review" |
|
|
local response=$(request_human_input 2 "Review the Bengali text in $DATA_DIR/bengali_text.txt (approve/reject/edit)") |
|
|
case "$response" in |
|
|
approve) |
|
|
set_status 2 "Saving preprocessed data" |
|
|
echo "Data preprocessed" > "$DATA_DIR/preprocessed_text.txt" |
|
|
log_action 2 "Preprocessing approved, saved to $DATA_DIR/preprocessed_text.txt" |
|
|
set_memory "data_preprocessed" "true" |
|
|
;; |
|
|
edit) |
|
|
set_status 2 "Editing data" |
|
|
log_action 2 "Human requested edit; applying transformation" |
|
|
run_python "with open('$DATA_DIR/bengali_text.txt', 'r') as f: text = f.read(); with open('$DATA_DIR/preprocessed_text.txt', 'w') as f: f.write(text.upper())" |
|
|
if [ $? -eq 0 ]; then |
|
|
set_memory "data_preprocessed" "true" |
|
|
else |
|
|
set_status 2 "Error: Edit failed" |
|
|
return 1 |
|
|
fi |
|
|
;; |
|
|
*) |
|
|
set_status 2 "Preprocessing rejected" |
|
|
log_action 2 "Preprocessing rejected by human" |
|
|
return 1 |
|
|
;; |
|
|
esac |
|
|
} |
|
|
|
|
|
function train_model { |
|
|
set_status 3 "Waiting for preprocessing" |
|
|
while [ "$(get_memory 'data_preprocessed')" != "true" ]; do |
|
|
sleep 1 |
|
|
done |
|
|
set_status 3 "Training model" |
|
|
if [ ! -f "$DATA_DIR/preprocessed_text.txt" ]; then |
|
|
set_status 3 "Error: Preprocessed data missing" |
|
|
log_action 3 "Error: No preprocessed data found at $DATA_DIR/preprocessed_text.txt" |
|
|
return 1 |
|
|
fi |
|
|
echo "Training Bengali model..." |
|
|
sleep 2 |
|
|
echo "Model trained" > "$PROJECT_DIR/model.pt" |
|
|
if [ $? -ne 0 ]; then |
|
|
set_status 3 "Error: Failed to save model" |
|
|
log_action 3 "Failed to save model to $PROJECT_DIR/model.pt" |
|
|
return 1 |
|
|
fi |
|
|
log_action 3 "Model saved to $PROJECT_DIR/model.pt" |
|
|
set_memory "model_trained" "true" |
|
|
set_status 3 "Training completed" |
|
|
} |
|
|
|
|
|
function evaluate_model { |
|
|
set_status 4 "Waiting for model training" |
|
|
while [ "$(get_memory 'model_trained')" != "true" ]; do |
|
|
sleep 1 |
|
|
done |
|
|
set_status 4 "Evaluating model" |
|
|
if [ ! -f "$PROJECT_DIR/model.pt" ]; then |
|
|
set_status 4 "Error: Model file missing" |
|
|
log_action 4 "Error: No model file found at $PROJECT_DIR/model.pt" |
|
|
return 1 |
|
|
fi |
|
|
local output=$(run_python "print('Simulated accuracy: 85%')") |
|
|
if [ $? -ne 0 ]; then |
|
|
set_status 4 "Error: Evaluation failed" |
|
|
log_action 4 "Evaluation failed" |
|
|
return 1 |
|
|
fi |
|
|
set_status 4 "Awaiting human review" |
|
|
local response=$(request_human_input 4 "Review model performance: $output (approve/reject/fix)") |
|
|
case "$response" in |
|
|
approve) |
|
|
log_action 4 "Evaluation approved" |
|
|
set_memory "evaluation_completed" "true" |
|
|
;; |
|
|
fix) |
|
|
set_status 4 "Fixing model" |
|
|
log_action 4 "Human requested fix; simulating correction" |
|
|
echo "Fixed model" > "$PROJECT_DIR/model.pt" |
|
|
set_memory "evaluation_completed" "true" |
|
|
;; |
|
|
*) |
|
|
set_status 4 "Evaluation rejected" |
|
|
log_action 4 "Evaluation rejected by human" |
|
|
return 1 |
|
|
;; |
|
|
esac |
|
|
set_status 4 "Evaluation completed" |
|
|
} |
|
|
|
|
|
|
|
|
function agent1 { |
|
|
set_status 1 "Starting data collection" |
|
|
until collect_data; do |
|
|
set_status 1 "Retrying data collection" |
|
|
log_action 1 "Retrying data collection after failure" |
|
|
sleep 2 |
|
|
done |
|
|
set_status 1 "Data collection completed" |
|
|
set_memory "agent1_completed" "true" |
|
|
} |
|
|
|
|
|
function agent2 { |
|
|
set_status 2 "Starting preprocessing" |
|
|
until preprocess_data; do |
|
|
set_status 2 "Retrying preprocessing" |
|
|
log_action 2 "Retrying preprocessing after failure" |
|
|
sleep 2 |
|
|
done |
|
|
set_status 2 "Preprocessing completed" |
|
|
set_memory "agent2_completed" "true" |
|
|
} |
|
|
|
|
|
function agent3 { |
|
|
set_status 3 "Starting training" |
|
|
until train_model; do |
|
|
set_status 3 "Retrying training" |
|
|
log_action 3 "Retrying training after failure" |
|
|
sleep 2 |
|
|
done |
|
|
set_status 3 "Training completed" |
|
|
set_memory "agent3_completed" "true" |
|
|
} |
|
|
|
|
|
function agent4 { |
|
|
set_status 4 "Starting evaluation" |
|
|
until evaluate_model; do |
|
|
set_status 4 "Retrying evaluation" |
|
|
log_action 4 "Retrying evaluation after failure" |
|
|
sleep 2 |
|
|
done |
|
|
set_status 4 "Evaluation completed" |
|
|
set_memory "agent4_completed" "true" |
|
|
} |
|
|
|
|
|
|
|
|
function display_status { |
|
|
echo -e "\033[1;34mββββββββββββββββββββββββ STATUS DASHBOARD βββββββββββββββββββββββ\033[0m" |
|
|
echo -e "\033[1;34mβ Bengali Language Model Generation - $(date +%H:%M:%S) β\033[0m" |
|
|
echo -e "\033[1;34mβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\033[0m" |
|
|
local completed=0 |
|
|
for agent in 1 2 3 4; do |
|
|
local status="Not started" |
|
|
if [ -f "$STATUS_DIR/agent$agent.status" ]; then |
|
|
status=$(cat "$STATUS_DIR/agent$agent.status") |
|
|
fi |
|
|
if [ "$(get_memory "agent${agent}_completed")" == "true" ]; then |
|
|
status="Completed" |
|
|
((completed++)) |
|
|
fi |
|
|
case $agent in |
|
|
1) color="\033[1;32m" ;; |
|
|
2) color="\033[1;33m" ;; |
|
|
3) color="\033[1;34m" ;; |
|
|
4) color="\033[1;35m" ;; |
|
|
esac |
|
|
echo -e "${color}Agent $agent: $status\033[0m" |
|
|
done |
|
|
local progress=$((completed * 25)) |
|
|
echo -e "\033[1;36mProgress: [$completed/4] ${progress}%\033[0m" |
|
|
} |
|
|
|
|
|
|
|
|
function hil_handler { |
|
|
while true; do |
|
|
clear |
|
|
display_status |
|
|
if [ "$(get_memory 'agent1_completed')" == "true" ] && \ |
|
|
[ "$(get_memory 'agent2_completed')" == "true" ] && \ |
|
|
[ "$(get_memory 'agent3_completed')" == "true" ] && \ |
|
|
[ "$(get_memory 'agent4_completed')" == "true" ]; then |
|
|
log_action "HIL" "All agents completed successfully" |
|
|
echo -e "\033[1;32mβ All agents completed! Model generation successful.\033[0m" |
|
|
break |
|
|
fi |
|
|
for req_file in "$REQUESTS_DIR"/*; do |
|
|
if [ -f "$req_file" ]; then |
|
|
local agent_id=$(basename "$req_file" .txt | sed 's/agent//') |
|
|
local request=$(cat "$req_file") |
|
|
echo -e "\n\033[1;33mAgent $agent_id requests your input:\033[0m $request" |
|
|
echo -e "\033[1;33mEnter response (e.g., approve/reject/edit/fix):\033[0m" |
|
|
read -r human_input |
|
|
if [ -z "$human_input" ]; then |
|
|
echo -e "\033[1;31mError: Input cannot be empty. Try again.\033[0m" |
|
|
continue |
|
|
fi |
|
|
echo "$human_input" > "$RESPONSES_DIR/agent$agent_id.txt" |
|
|
rm "$req_file" |
|
|
fi |
|
|
done |
|
|
sleep 1 |
|
|
done |
|
|
} |
|
|
|
|
|
|
|
|
function cleanup { |
|
|
echo -e "\033[1;31mScript interrupted. Cleaning up...\033[0m" |
|
|
rm -f "$REQUESTS_DIR"/* "$RESPONSES_DIR"/* 2>/dev/null |
|
|
log_action "Main" "Script terminated by user" |
|
|
exit 1 |
|
|
} |
|
|
trap cleanup INT TERM |
|
|
|
|
|
|
|
|
echo -e "\033[1;32mStarting Bengali language model generation...\033[0m" |
|
|
log_action "Main" "Script execution started" |
|
|
|
|
|
agent1 & |
|
|
agent2 & |
|
|
agent3 & |
|
|
agent4 & |
|
|
|
|
|
hil_handler |
|
|
|
|
|
echo -e "\033[1;32mProcess completed successfully!\033[0m" |
|
|
echo "Model saved at: $PROJECT_DIR/model.pt" |
|
|
echo "Detailed logs available at: $LOG_FILE" |