Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 27 additions & 6 deletions aios/config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,35 @@ api_keys:
home: "" # Optional: HuggingFace models path

# LLM Configuration
llm:
default_model: "gpt-4"
max_new_tokens: 256
backend: "openai"
max_gpu_memory: null
eval_device: "cuda:0"
llms:
models:
- name: "gpt-4o-mini"
backend: "openai"
max_new_tokens: 256
temperature: 1.0

- name: "gemini-1.5-flash"
backend: "google"
max_new_tokens: 1024
temperature: 1.0

log_mode: "console"

memory:
memory_limit: 524288 # 512KB
eviction_k: 3

storage:
root_dir: "root"
use_vector_db: true

scheduler:
log_mode: "console"

agent_factory:
log_mode: "console"
max_workers: 64

server:
host: "localhost"
port: 8000
43 changes: 26 additions & 17 deletions aios/config/config_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,24 +80,33 @@ def get_api_key(self, provider: str) -> Optional[str]:

return api_key

def get_llm_config(self) -> dict:
"""Get LLM configuration"""
llm_config = self.config.get('llm', {})
if not llm_config:
# Provide default configuration
llm_config = {
"default_model": "gpt-4",
"max_new_tokens": 256,
"backend": "openai",
"max_gpu_memory": None,
"eval_device": "cuda:0",
"log_mode": "console"
}
return llm_config
def get_llms_config(self) -> dict:
"""Get configuration of LLMs"""
return self.config.get('llms', {})

def get_storage_config(self) -> dict:
"""Get storage configuration"""
return self.config.get("storage", {})

def get_memory_config(self) -> dict:
"""Get memory configuration"""
return self.config.get("memory", {})

def get_tool_config(self) -> dict:
"""Get tool configuration"""
return self.config.get("tools", {})

def get_scheduler_config(self) -> dict:
"""Get scheduler configuration"""
return self.config.get("scheduler", {})

def get_agent_factory_config(self) -> dict:
"""Get agent factory configuration"""
return self.config.get("agent_factory", {})

def get_kernel_config(self) -> dict:
"""Get kernel configuration"""
return self.config.get("kernel", {})
# def get_kernel_config(self) -> dict:
# """Get kernel configuration"""
# return self.config.get("kernel", {})

# Global config instance
config = ConfigManager()
72 changes: 56 additions & 16 deletions aios/hooks/modules/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,29 @@
# QueueCheckEmpty,
)

from aios.hooks.types.llm import LLMRequestQueue
from aios.hooks.types.memory import MemoryRequestQueue
from aios.hooks.types.storage import StorageRequestQueue
from aios.hooks.types.tool import ToolRequestQueue

from contextlib import contextmanager

from aios.hooks.utils.validate import validate
from aios.hooks.stores import queue as QueueStore, processes as ProcessStore
from aios.scheduler.fifo_scheduler import FIFOScheduler
# from aios.scheduler.rr_scheduler import RRScheduler


@validate(SchedulerParams)
def useFIFOScheduler(
params: SchedulerParams,
) -> Tuple[Callable[[], None], Callable[[], None]]:
):
"""
Initialize and return a scheduler with start and stop functions.

Args:
params (SchedulerParams): Parameters required for the scheduler.

Returns:
Tuple: A tuple containing the start and stop functions for the scheduler.
"""
if params.get_llm_syscall is None:
from aios.hooks.stores._global import global_llm_req_queue_get_message
Expand All @@ -47,7 +51,19 @@ def useFIFOScheduler(
if params.get_tool_syscall is None:
from aios.hooks.stores._global import global_tool_req_queue_get_message
params.get_tool_syscall = global_tool_req_queue_get_message


# if params.llm_request_queue is None:
# params.llm_request_queue = LLMRequestQueue

# if params.memory_request_queue is None:
# params.memory_request_queue = MemoryRequestQueue

# if params.storage_request_queue is None:
# params.storage_request_queue = StorageRequestQueue

# if params.tool_request_queue is None:
# params.tool_request_queue = ToolRequestQueue

scheduler = FIFOScheduler(**params.model_dump())

# Function to start the scheduler
Expand All @@ -70,21 +86,33 @@ def fifo_scheduler(params: SchedulerParams):
Args:
params (SchedulerParams): The parameters for the scheduler.
"""
if params.get_llm_syscall is None:
from aios.hooks.stores._global import global_llm_req_queue_get_message
params.get_llm_syscall = global_llm_req_queue_get_message
# if params.get_llm_syscall is None:
# from aios.hooks.stores._global import global_llm_req_queue_get_message
# params.get_llm_syscall = global_llm_req_queue_get_message

if params.get_memory_syscall is None:
from aios.hooks.stores._global import global_memory_req_queue_get_message
params.get_memory_syscall = global_memory_req_queue_get_message
# if params.get_memory_syscall is None:
# from aios.hooks.stores._global import global_memory_req_queue_get_message
# params.get_memory_syscall = global_memory_req_queue_get_message

if params.get_storage_syscall is None:
from aios.hooks.stores._global import global_storage_req_queue_get_message
params.get_storage_syscall = global_storage_req_queue_get_message
# if params.get_storage_syscall is None:
# from aios.hooks.stores._global import global_storage_req_queue_get_message
# params.get_storage_syscall = global_storage_req_queue_get_message

if params.get_tool_syscall is None:
from aios.hooks.stores._global import global_tool_req_queue_get_message
params.get_tool_syscall = global_tool_req_queue_get_message
# if params.get_tool_syscall is None:
# from aios.hooks.stores._global import global_tool_req_queue_get_message
# params.get_tool_syscall = global_tool_req_queue_get_message

if params.llm_request_queue is None:
params.llm_request_queue = LLMRequestQueue

if params.memory_request_queue is None:
params.memory_request_queue = MemoryRequestQueue

if params.storage_request_queue is None:
params.storage_request_queue = StorageRequestQueue

if params.tool_request_queue is None:
params.tool_request_queue = ToolRequestQueue

scheduler = FIFOScheduler(**params.model_dump())

Expand Down Expand Up @@ -116,6 +144,18 @@ def fifo_scheduler_nonblock(params: SchedulerParams):
from aios.hooks.stores._global import global_tool_req_queue_get_message
params.get_tool_syscall = global_tool_req_queue_get_message

# if params.llm_request_queue is None:
# params.llm_request_queue = LLMRequestQueue

# if params.memory_request_queue is None:
# params.memory_request_queue = MemoryRequestQueue

# if params.storage_request_queue is None:
# params.storage_request_queue = StorageRequestQueue

# if params.tool_request_queue is None:
# params.tool_request_queue = ToolRequestQueue

scheduler = FIFOScheduler(**params.model_dump())

return scheduler
16 changes: 10 additions & 6 deletions aios/hooks/stores/queue.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
from queue import Queue

from typing import List
REQUEST_QUEUE: dict[str, Queue] = {}
# REQUEST_QUEUE: dict[str, []] = {}


def getMessage(q: Queue):
def getMessage(q: List):
return q.get(block=True, timeout=0.1)
# return q.pop(0)

def addMessage(q: Queue, message: str):
def addMessage(q: List, message: str):
# q.append(message)
q.put(message)

return None

def isEmpty(q: Queue):
return q.empty()
def isEmpty(q: List):
# return len(q) == 0
return q.empty()
18 changes: 16 additions & 2 deletions aios/hooks/syscall.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,17 @@
global_memory_req_queue_add_message,
global_storage_req_queue_add_message,
global_tool_req_queue_add_message,
# global_llm_req_queue,
# global_memory_req_queue,
# global_storage_req_queue,
# global_tool_req_queue,
)

from aios.hooks.types.llm import LLMRequestQueue
from aios.hooks.types.memory import MemoryRequestQueue
from aios.hooks.types.storage import StorageRequestQueue
from aios.hooks.types.tool import ToolRequestQueue

from cerebrum.llm.communication import LLMQuery
from cerebrum.memory.communication import MemoryQuery
from cerebrum.storage.communication import StorageQuery
Expand All @@ -41,6 +50,7 @@ def storage_syscall_exec(agent_name, query):
syscall.set_response(None)

global_storage_req_queue_add_message(syscall)
# StorageRequestQueue.append(syscall)

syscall.start()
syscall.join()
Expand All @@ -49,6 +59,7 @@ def storage_syscall_exec(agent_name, query):

if syscall.get_status() != "done":
pass

start_time = syscall.get_start_time()
end_time = syscall.get_end_time()
waiting_time = start_time - syscall.get_created_time()
Expand Down Expand Up @@ -85,6 +96,7 @@ def mem_syscall_exec(agent_name, query):
syscall.set_response(None)

global_memory_req_queue_add_message(syscall)
# MemoryRequestQueue.append(syscall)

syscall.start()
syscall.join()
Expand Down Expand Up @@ -129,6 +141,7 @@ def tool_syscall_exec(agent_name, tool_calls):
syscall.set_response(None)

global_tool_req_queue_add_message(syscall)
# ToolRequestQueue.append(syscall)

syscall.start()
syscall.join()
Expand Down Expand Up @@ -175,6 +188,7 @@ def llm_syscall_exec(agent_name, query):
syscall.set_response(None)

global_llm_req_queue_add_message(syscall)
# LLMRequestQueue.append(syscall)

syscall.start()
syscall.join()
Expand Down Expand Up @@ -202,7 +216,7 @@ def llm_syscall_exec(agent_name, query):
}


def send_request(agent_name, query):
def execute_request(agent_name, query):
if isinstance(query, LLMQuery):
action_type = query.action_type
# print(action_type)
Expand Down Expand Up @@ -281,4 +295,4 @@ class SysCallWrapper:
memory = memoryview
tool = tool_syscall_exec

return send_request, SysCallWrapper
return execute_request, SysCallWrapper
1 change: 1 addition & 0 deletions aios/hooks/types/llm.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from queue import Queue

LLMRequestQueue: TypeAlias = Queue
# LLMRequestQueue: TypeAlias = []

LLMRequestQueueGetMessage: TypeAlias = Callable[[], None]
LLMRequestQueueAddMessage: TypeAlias = Callable[[str], None]
Expand Down
1 change: 1 addition & 0 deletions aios/hooks/types/memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from queue import Queue

MemoryRequestQueue: TypeAlias = Queue
# MemoryRequestQueue: TypeAlias = []

MemoryRequestQueueGetMessage: TypeAlias = Callable[[], None]
MemoryRequestQueueAddMessage: TypeAlias = Callable[[str], None]
Expand Down
12 changes: 11 additions & 1 deletion aios/hooks/types/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,24 @@
from .memory import MemoryRequestQueueGetMessage
from .storage import StorageRequestQueueGetMessage
from .tool import ToolRequestQueueGetMessage
# from .llm import LLMRequestQueue
# from .memory import MemoryRequestQueue
# from .storage import StorageRequestQueue
# from .tool import ToolRequestQueue


class SchedulerParams(BaseModel):
llm: Any
memory_manager: Any
storage_manager: Any
tool_manager: Any
log_mode: str
# llm_request_queue: Any
# memory_request_queue: Any
# storage_request_queue: Any
# tool_request_queue: Any
get_llm_syscall: LLMRequestQueueGetMessage | None
get_memory_syscall: MemoryRequestQueueGetMessage | None
get_storage_syscall: StorageRequestQueueGetMessage | None
get_tool_syscall: ToolRequestQueueGetMessage | None
get_tool_syscall: ToolRequestQueueGetMessage | None

1 change: 1 addition & 0 deletions aios/hooks/types/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from queue import Queue

StorageRequestQueue: TypeAlias = Queue
# StorageRequestQueue: TypeAlias = []

StorageRequestQueueGetMessage: TypeAlias = Callable[[], None]
StorageRequestQueueAddMessage: TypeAlias = Callable[[str], None]
Expand Down
1 change: 1 addition & 0 deletions aios/hooks/types/tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from queue import Queue

ToolRequestQueue: TypeAlias = Queue
# ToolRequestQueue: TypeAlias = []

ToolRequestQueueGetMessage: TypeAlias = Callable[[], None]
ToolRequestQueueAddMessage: TypeAlias = Callable[[str], None]
Expand Down
11 changes: 11 additions & 0 deletions aios/llm_core/llm_cost_map.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[
{"name": "Qwen-2.5-7B-Instruct", "hosted_model": "ollama/qwen2.5:7b", "cost_per_input_token": 0.000000267, "cost_per_output_token": 0.000000267},
{"name": "Qwen-2.5-14B-Instruct", "hosted_model": "ollama/qwen2.5:14b", "cost_per_input_token": 0.000000534, "cost_per_output_token": 0.000000534},
{"name": "Qwen-2.5-32B-Instruct", "hosted_model": "ollama/qwen2.5:32b", "cost_per_input_token": 0.00000122, "cost_per_output_token": 0.00000122},
{"name": "Llama-3.1-8B-Instruct", "hosted_model": "ollama/llama3.1:8b", "cost_per_input_token": 0.000000305, "cost_per_output_token": 0.000000305},
{"name": "Deepseek-r1-7b", "hosted_model": "ollama/deepseek-r1:7b", "cost_per_input_token": 0.000000267, "cost_per_output_token": 0.000000267},
{"name": "Deepseek-r1-14b", "hosted_model": "ollama/deepseek-r1:14b", "cost_per_input_token": 0.000000534, "cost_per_output_token": 0.000000534},
{"name": "gpt-4o-mini", "hosted_model": "gpt-4o-mini", "cost_per_input_token": 0.00000015, "cost_per_output_token": 0.0000006},
{"name": "gpt-4o", "hosted_model": "gpt-4o", "cost_per_input_token": 0.0000025, "cost_per_output_token": 0.00001},
{"name": "gemini-1.5-flash", "hosted_model": "gemini/gemini-1.5-flash", "cost_per_input_token": 0.000000075, "cost_per_output_token": 0.0000003}
]
Loading
Loading