diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5abefe8d..94b23e80 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: python-version: ${{ matrix.python-version }} cache: 'poetry' - run: poetry install - - run: poetry run pytest --cov=nalgonda --cov-report=xml + - run: poetry run pytest --cov=backend --cov-report=xml - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 env: diff --git a/.gitignore b/.gitignore index 1dffeb5c..ee0c1f72 100644 --- a/.gitignore +++ b/.gitignore @@ -168,5 +168,5 @@ settings.json *.log.jsonl # UI folder -nalgonda/ui/* -nalgonda/data/agency_data/* +backend/ui/* +backend/data/agency_data/* diff --git a/Procfile b/Procfile index acfc7db5..3c07162d 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: gunicorn -w 1 -k uvicorn.workers.UvicornWorker --timeout 120 nalgonda.main:app +web: gunicorn -w 1 -k uvicorn.workers.UvicornWorker --timeout 120 backend.main:app diff --git a/README.md b/README.md index 6ef85c4f..71665333 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Project Nalgonda +# AI in Hand Platform ## Overview -Project Nalgonda is an advanced platform designed for the orchestration and operational management of AI-driven swarm agencies. Leveraging [OpenAI Assistants API](https://platform.openai.com/docs/assistants/overview), it enriches the capabilities of the AI agents with specialized skills and a robust management system. Built on a FastAPI framework and employing Firebase Firestore along with OpenAI's GPT models, it enables dynamic agency and agent management at scale. +AI in Hand Platform is a web application designed for the orchestration and operational management of AI-driven swarm agencies. Leveraging [OpenAI Assistants API](https://platform.openai.com/docs/assistants/overview), it enriches the capabilities of the AI agents with specialized skills and a robust management system. Built on a FastAPI framework and employing Firebase Firestore along with OpenAI's GPT models, it enables dynamic agency and agent management at scale. ## Key Components @@ -26,17 +26,17 @@ Project Nalgonda is an advanced platform designed for the orchestration and oper ## Installation -Follow these steps for setting up the environment and running the Nalgonda project locally: +Follow these steps for setting up the environment and running the AI in Hand Platform locally: 1. Ensure Python 3.11+ and Node.js 20.10+ are installed. 2. Install Python dependencies either from `requirements.txt` or using Poetry. 3. Configure environment variables in ".env", taking ".env.testing" as a reference point (used only for local development). 4. To set up the frontend: - For local development: `npm install && npm run start` - - For production: `npm install -g gatsby-cli && npm install --global yarn && yarn install && yarn build` (builds to nalgonda/ui/ directory to be served by FastAPI) + - For production: `npm install -g gatsby-cli && npm install --global yarn && yarn install && yarn build` (builds to backend/ui/ directory to be served by FastAPI) ### Running the Application -Start the FastAPI server with: `uvicorn nalgonda.main:app --reload` +Start the FastAPI server with: `uvicorn backend.main:app --reload` ## Deployment to Heroku diff --git a/app.json b/app.json index 62914c09..c8078138 100644 --- a/app.json +++ b/app.json @@ -1,8 +1,8 @@ { - "name": "Nalgonda", - "description": "A FastAPI application to manage swarm agencies", - "image": "ainhand/nalgonda", - "repository": "https://github.com/ainhand/nalgonda", + "name": "AI in Hand Platform", + "description": "A web application to manage swarm agencies.", + "image": "ainhand/platform", + "repository": "https://github.com/ai-in-hand/platform", "keywords": ["python", "fastapi"], "env": { "EXAMPLE_SECRET_KEY": { diff --git a/nalgonda/README.md b/backend/README.md similarity index 85% rename from nalgonda/README.md rename to backend/README.md index 2ecfef99..9cd03b57 100644 --- a/nalgonda/README.md +++ b/backend/README.md @@ -1,7 +1,7 @@ -# Nalgonda Project Overview +# AI in Hand Platform Overview -The Nalgonda project is a comprehensive backend application designed to manage agencies, agents, and their interactions. -It employs a variety of custom skills, data models, persistent storage mechanisms, backend services, +The AI in Hand Platform is a comprehensive web application designed to manage agencies, agents, and their interactions. +It includes a variety of custom skills, data models, persistent storage mechanisms, backend services, external dependencies, and routed endpoints to deliver a fully functional system for agency management. ## Directory Overview diff --git a/nalgonda/__init__.py b/backend/__init__.py similarity index 100% rename from nalgonda/__init__.py rename to backend/__init__.py diff --git a/nalgonda/constants.py b/backend/constants.py similarity index 100% rename from nalgonda/constants.py rename to backend/constants.py diff --git a/nalgonda/custom_skills/README.md b/backend/custom_skills/README.md similarity index 95% rename from nalgonda/custom_skills/README.md rename to backend/custom_skills/README.md index 10e1f002..892006ef 100644 --- a/nalgonda/custom_skills/README.md +++ b/backend/custom_skills/README.md @@ -1,6 +1,6 @@ # Custom Skills Directory -This directory contains a collection of custom skills developed to extend the functionalities of the Nalgonda project. +This directory contains a collection of custom skills developed to extend the functionalities of the AI in Hand Platform. Each skill performs a specific task and can be called upon when needed. ## Skills and Descriptions diff --git a/backend/custom_skills/__init__.py b/backend/custom_skills/__init__.py new file mode 100644 index 00000000..bd86f31c --- /dev/null +++ b/backend/custom_skills/__init__.py @@ -0,0 +1,26 @@ +# Mapping skill names to actual skill classes +from agency_swarm.tools import CodeInterpreter, Retrieval + +from backend.custom_skills.build_directory_tree import BuildDirectoryTree +from backend.custom_skills.generate_proposal import GenerateProposal +from backend.custom_skills.print_all_files_in_path import PrintAllFilesInPath +from backend.custom_skills.print_file_contents import PrintFileContents +from backend.custom_skills.save_lead_to_airtable import SaveLeadToAirtable +from backend.custom_skills.search_web import SearchWeb +from backend.custom_skills.summarize_all_code_in_path import SummarizeAllCodeInPath +from backend.custom_skills.summarize_code import SummarizeCode +from backend.custom_skills.write_and_save_program import WriteAndSaveProgram + +SKILL_MAPPING = { + "CodeInterpreter": CodeInterpreter, + "Retrieval": Retrieval, + "BuildDirectoryTree": BuildDirectoryTree, + "GenerateProposal": GenerateProposal, + "PrintAllFilesInPath": PrintAllFilesInPath, + "PrintFileContents": PrintFileContents, + "SaveLeadToAirtable": SaveLeadToAirtable, + "SearchWeb": SearchWeb, + "SummarizeAllCodeInPath": SummarizeAllCodeInPath, + "SummarizeCode": SummarizeCode, + "WriteAndSaveProgram": WriteAndSaveProgram, +} diff --git a/nalgonda/custom_skills/build_directory_tree.py b/backend/custom_skills/build_directory_tree.py similarity index 98% rename from nalgonda/custom_skills/build_directory_tree.py rename to backend/custom_skills/build_directory_tree.py index 3af181b3..6524b232 100644 --- a/nalgonda/custom_skills/build_directory_tree.py +++ b/backend/custom_skills/build_directory_tree.py @@ -4,7 +4,7 @@ from agency_swarm import BaseTool from pydantic import Field, field_validator -from nalgonda.custom_skills.utils import check_directory_traversal +from backend.custom_skills.utils import check_directory_traversal MAX_LENGTH = 3000 diff --git a/nalgonda/custom_skills/generate_proposal.py b/backend/custom_skills/generate_proposal.py similarity index 91% rename from nalgonda/custom_skills/generate_proposal.py rename to backend/custom_skills/generate_proposal.py index 2b9ac264..e8b13ea3 100644 --- a/nalgonda/custom_skills/generate_proposal.py +++ b/backend/custom_skills/generate_proposal.py @@ -1,8 +1,8 @@ from agency_swarm import BaseTool from pydantic import Field -from nalgonda.settings import settings -from nalgonda.utils import get_chat_completion +from backend.settings import settings +from backend.utils import get_chat_completion USER_PROMPT_PREFIX = "Please draft a proposal for the following project brief: \n" SYSTEM_MESSAGE = """\ diff --git a/nalgonda/custom_skills/print_all_files_in_path.py b/backend/custom_skills/print_all_files_in_path.py similarity index 96% rename from nalgonda/custom_skills/print_all_files_in_path.py rename to backend/custom_skills/print_all_files_in_path.py index 49b88f50..9f3d2358 100644 --- a/nalgonda/custom_skills/print_all_files_in_path.py +++ b/backend/custom_skills/print_all_files_in_path.py @@ -3,7 +3,7 @@ from agency_swarm import BaseTool from pydantic import Field, field_validator -from nalgonda.custom_skills.utils import check_directory_traversal, read_file +from backend.custom_skills.utils import check_directory_traversal, read_file class PrintAllFilesInPath(BaseTool): diff --git a/nalgonda/custom_skills/print_file_contents.py b/backend/custom_skills/print_file_contents.py similarity index 91% rename from nalgonda/custom_skills/print_file_contents.py rename to backend/custom_skills/print_file_contents.py index 6723ba8b..e1daaa90 100644 --- a/nalgonda/custom_skills/print_file_contents.py +++ b/backend/custom_skills/print_file_contents.py @@ -3,7 +3,7 @@ from agency_swarm import BaseTool from pydantic import Field, field_validator -from nalgonda.custom_skills.utils import check_directory_traversal, read_file +from backend.custom_skills.utils import check_directory_traversal, read_file class PrintFileContents(BaseTool): diff --git a/nalgonda/custom_skills/save_lead_to_airtable.py b/backend/custom_skills/save_lead_to_airtable.py similarity index 91% rename from nalgonda/custom_skills/save_lead_to_airtable.py rename to backend/custom_skills/save_lead_to_airtable.py index 8bdb14c9..99a7ccf7 100644 --- a/nalgonda/custom_skills/save_lead_to_airtable.py +++ b/backend/custom_skills/save_lead_to_airtable.py @@ -4,8 +4,8 @@ from pyairtable import Api from pydantic import Field -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.env_config_manager import EnvConfigManager +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.env_config_manager import EnvConfigManager logger = logging.getLogger(__name__) diff --git a/nalgonda/custom_skills/search_web.py b/backend/custom_skills/search_web.py similarity index 100% rename from nalgonda/custom_skills/search_web.py rename to backend/custom_skills/search_web.py diff --git a/nalgonda/custom_skills/summarize_all_code_in_path.py b/backend/custom_skills/summarize_all_code_in_path.py similarity index 95% rename from nalgonda/custom_skills/summarize_all_code_in_path.py rename to backend/custom_skills/summarize_all_code_in_path.py index e86c9347..c9c4386e 100644 --- a/nalgonda/custom_skills/summarize_all_code_in_path.py +++ b/backend/custom_skills/summarize_all_code_in_path.py @@ -3,9 +3,9 @@ from agency_swarm import BaseTool from pydantic import Field -from nalgonda.custom_skills import PrintAllFilesInPath -from nalgonda.settings import settings -from nalgonda.utils import chunk_input_with_token_limit, get_chat_completion +from backend.custom_skills import PrintAllFilesInPath +from backend.settings import settings +from backend.utils import chunk_input_with_token_limit, get_chat_completion SYSTEM_MESSAGE = """\ Your main job is to handle programming code from SEVERAL FILES. \ diff --git a/nalgonda/custom_skills/summarize_code.py b/backend/custom_skills/summarize_code.py similarity index 92% rename from nalgonda/custom_skills/summarize_code.py rename to backend/custom_skills/summarize_code.py index aee6e66f..69963a67 100644 --- a/nalgonda/custom_skills/summarize_code.py +++ b/backend/custom_skills/summarize_code.py @@ -3,9 +3,9 @@ from agency_swarm import BaseTool from pydantic import Field -from nalgonda.custom_skills import PrintFileContents -from nalgonda.settings import settings -from nalgonda.utils import get_chat_completion +from backend.custom_skills import PrintFileContents +from backend.settings import settings +from backend.utils import get_chat_completion SYSTEM_MESSAGE = """\ Your main job is to handle programming code from A FILE. \ diff --git a/nalgonda/custom_skills/utils.py b/backend/custom_skills/utils.py similarity index 100% rename from nalgonda/custom_skills/utils.py rename to backend/custom_skills/utils.py diff --git a/nalgonda/custom_skills/write_and_save_program.py b/backend/custom_skills/write_and_save_program.py similarity index 94% rename from nalgonda/custom_skills/write_and_save_program.py rename to backend/custom_skills/write_and_save_program.py index 55ce81f4..0ac9c73a 100644 --- a/nalgonda/custom_skills/write_and_save_program.py +++ b/backend/custom_skills/write_and_save_program.py @@ -3,8 +3,8 @@ from agency_swarm import BaseTool from pydantic import Field -from nalgonda.constants import AGENCY_DATA_DIR -from nalgonda.services.env_vars_manager import ContextEnvVarsManager +from backend.constants import AGENCY_DATA_DIR +from backend.services.env_vars_manager import ContextEnvVarsManager class File(BaseTool): diff --git a/nalgonda/dependencies/README.md b/backend/dependencies/README.md similarity index 100% rename from nalgonda/dependencies/README.md rename to backend/dependencies/README.md diff --git a/nalgonda/dependencies/__init__.py b/backend/dependencies/__init__.py similarity index 100% rename from nalgonda/dependencies/__init__.py rename to backend/dependencies/__init__.py diff --git a/nalgonda/dependencies/auth.py b/backend/dependencies/auth.py similarity index 97% rename from nalgonda/dependencies/auth.py rename to backend/dependencies/auth.py index 74d6df54..3436b89b 100644 --- a/nalgonda/dependencies/auth.py +++ b/backend/dependencies/auth.py @@ -7,7 +7,7 @@ from firebase_admin import auth from firebase_admin.exceptions import InvalidArgumentError, UnknownError -from nalgonda.models.auth import User +from backend.models.auth import User logger = logging.getLogger(__name__) diff --git a/nalgonda/dependencies/dependencies.py b/backend/dependencies/dependencies.py similarity index 69% rename from nalgonda/dependencies/dependencies.py rename to backend/dependencies/dependencies.py index f65f8557..e3e61e20 100644 --- a/nalgonda/dependencies/dependencies.py +++ b/backend/dependencies/dependencies.py @@ -1,15 +1,15 @@ from fastapi import Depends from redis import asyncio as aioredis -from nalgonda.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage -from nalgonda.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.repositories.session_firestore_storage import SessionConfigFirestoreStorage -from nalgonda.services.agency_manager import AgencyManager -from nalgonda.services.agent_manager import AgentManager -from nalgonda.services.caching.redis_cache_manager import RedisCacheManager -from nalgonda.services.session_manager import SessionManager -from nalgonda.settings import settings +from backend.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage +from backend.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.repositories.session_firestore_storage import SessionConfigFirestoreStorage +from backend.services.agency_manager import AgencyManager +from backend.services.agent_manager import AgentManager +from backend.services.caching.redis_cache_manager import RedisCacheManager +from backend.services.session_manager import SessionManager +from backend.settings import settings def get_redis() -> aioredis.Redis: diff --git a/nalgonda/exception_handlers.py b/backend/exception_handlers.py similarity index 100% rename from nalgonda/exception_handlers.py rename to backend/exception_handlers.py diff --git a/backend/exceptions.py b/backend/exceptions.py new file mode 100644 index 00000000..50c7a52e --- /dev/null +++ b/backend/exceptions.py @@ -0,0 +1,2 @@ +# exceptions.py - Custom exceptions for the AI in Hand Platform +# This file is reserved for custom exception classes. diff --git a/nalgonda/main.py b/backend/main.py similarity index 78% rename from nalgonda/main.py rename to backend/main.py index 0a663704..86c8ab47 100644 --- a/nalgonda/main.py +++ b/backend/main.py @@ -8,15 +8,15 @@ from pydantic import ValidationError from starlette.staticfiles import StaticFiles -from nalgonda.utils.logging_utils import setup_logging +from backend.utils.logging_utils import setup_logging setup_logging() -from nalgonda.constants import BASE_DIR # noqa # isort:skip -from nalgonda.exception_handlers import bad_request_exception_handler, unhandled_exception_handler # noqa # isort:skip -from nalgonda.routers.v1 import v1_router # noqa # isort:skip -from nalgonda.settings import settings # noqa # isort:skip -from nalgonda.utils import init_webserver_folders # noqa # isort:skip +from backend.constants import BASE_DIR # noqa # isort:skip +from backend.exception_handlers import bad_request_exception_handler, unhandled_exception_handler # noqa # isort:skip +from backend.routers.v1 import v1_router # noqa # isort:skip +from backend.settings import settings # noqa # isort:skip +from backend.utils import init_webserver_folders # noqa # isort:skip # just a placeholder for compatibility with agency-swarm openai.api_key = "sk-1234567890" diff --git a/nalgonda/models/README.md b/backend/models/README.md similarity index 92% rename from nalgonda/models/README.md rename to backend/models/README.md index 0c347a0a..d788dc56 100644 --- a/nalgonda/models/README.md +++ b/backend/models/README.md @@ -1,6 +1,6 @@ # Models Directory -This directory contains the data models used across the Nalgonda project. +This directory contains the data models used across the AI in Hand Platform. These models define the data structures, validation logic, and relationships between data entities. They are essential for the proper functioning of the application, ensuring data integrity and facilitating data operations. diff --git a/nalgonda/models/__init__.py b/backend/models/__init__.py similarity index 100% rename from nalgonda/models/__init__.py rename to backend/models/__init__.py diff --git a/nalgonda/models/agency_config.py b/backend/models/agency_config.py similarity index 100% rename from nalgonda/models/agency_config.py rename to backend/models/agency_config.py diff --git a/nalgonda/models/agent_config.py b/backend/models/agent_config.py similarity index 100% rename from nalgonda/models/agent_config.py rename to backend/models/agent_config.py diff --git a/nalgonda/models/auth.py b/backend/models/auth.py similarity index 100% rename from nalgonda/models/auth.py rename to backend/models/auth.py diff --git a/nalgonda/models/request_models.py b/backend/models/request_models.py similarity index 100% rename from nalgonda/models/request_models.py rename to backend/models/request_models.py diff --git a/nalgonda/models/session_config.py b/backend/models/session_config.py similarity index 100% rename from nalgonda/models/session_config.py rename to backend/models/session_config.py diff --git a/nalgonda/models/skill_config.py b/backend/models/skill_config.py similarity index 100% rename from nalgonda/models/skill_config.py rename to backend/models/skill_config.py diff --git a/nalgonda/repositories/README.md b/backend/repositories/README.md similarity index 96% rename from nalgonda/repositories/README.md rename to backend/repositories/README.md index 7ce654f2..b1c14ce0 100644 --- a/nalgonda/repositories/README.md +++ b/backend/repositories/README.md @@ -1,6 +1,6 @@ # Repositories Directory -This directory is responsible for all persistent storage interactions within the Nalgonda project, +This directory is responsible for all persistent storage interactions within the AI in Hand Platform, particularly with Firestore. It contains implementations for storing, retrieving, and managing configurations and data for agencies, agents, skills, etc. diff --git a/nalgonda/repositories/__init__.py b/backend/repositories/__init__.py similarity index 100% rename from nalgonda/repositories/__init__.py rename to backend/repositories/__init__.py diff --git a/nalgonda/repositories/agency_config_firestore_storage.py b/backend/repositories/agency_config_firestore_storage.py similarity index 96% rename from nalgonda/repositories/agency_config_firestore_storage.py rename to backend/repositories/agency_config_firestore_storage.py index 1754c0d6..3b6753bd 100644 --- a/nalgonda/repositories/agency_config_firestore_storage.py +++ b/backend/repositories/agency_config_firestore_storage.py @@ -1,7 +1,7 @@ from firebase_admin import firestore from google.cloud.firestore_v1 import FieldFilter -from nalgonda.models.agency_config import AgencyConfig +from backend.models.agency_config import AgencyConfig class AgencyConfigFirestoreStorage: diff --git a/nalgonda/repositories/agent_config_firestore_storage.py b/backend/repositories/agent_config_firestore_storage.py similarity index 96% rename from nalgonda/repositories/agent_config_firestore_storage.py rename to backend/repositories/agent_config_firestore_storage.py index 75944a51..f9b75ab0 100644 --- a/nalgonda/repositories/agent_config_firestore_storage.py +++ b/backend/repositories/agent_config_firestore_storage.py @@ -1,7 +1,7 @@ from firebase_admin import firestore from google.cloud.firestore_v1 import FieldFilter -from nalgonda.models.agent_config import AgentConfig +from backend.models.agent_config import AgentConfig class AgentConfigFirestoreStorage: diff --git a/nalgonda/repositories/env_config_firestore_storage.py b/backend/repositories/env_config_firestore_storage.py similarity index 100% rename from nalgonda/repositories/env_config_firestore_storage.py rename to backend/repositories/env_config_firestore_storage.py diff --git a/nalgonda/repositories/session_firestore_storage.py b/backend/repositories/session_firestore_storage.py similarity index 95% rename from nalgonda/repositories/session_firestore_storage.py rename to backend/repositories/session_firestore_storage.py index 2a729996..74b3b3d9 100644 --- a/nalgonda/repositories/session_firestore_storage.py +++ b/backend/repositories/session_firestore_storage.py @@ -1,7 +1,7 @@ from firebase_admin import firestore from google.cloud.firestore_v1 import FieldFilter -from nalgonda.models.session_config import SessionConfig +from backend.models.session_config import SessionConfig class SessionConfigFirestoreStorage: diff --git a/nalgonda/repositories/skill_config_firestore_storage.py b/backend/repositories/skill_config_firestore_storage.py similarity index 96% rename from nalgonda/repositories/skill_config_firestore_storage.py rename to backend/repositories/skill_config_firestore_storage.py index 1aae1a6c..f5e39bbd 100644 --- a/nalgonda/repositories/skill_config_firestore_storage.py +++ b/backend/repositories/skill_config_firestore_storage.py @@ -1,7 +1,7 @@ from firebase_admin import firestore from google.cloud.firestore_v1 import FieldFilter -from nalgonda.models.skill_config import SkillConfig +from backend.models.skill_config import SkillConfig class SkillConfigFirestoreStorage: diff --git a/nalgonda/routers/README.md b/backend/routers/README.md similarity index 100% rename from nalgonda/routers/README.md rename to backend/routers/README.md diff --git a/nalgonda/routers/__init__.py b/backend/routers/__init__.py similarity index 100% rename from nalgonda/routers/__init__.py rename to backend/routers/__init__.py diff --git a/nalgonda/routers/v1/__init__.py b/backend/routers/v1/__init__.py similarity index 100% rename from nalgonda/routers/v1/__init__.py rename to backend/routers/v1/__init__.py diff --git a/nalgonda/routers/v1/api/__init__.py b/backend/routers/v1/api/__init__.py similarity index 93% rename from nalgonda/routers/v1/api/__init__.py rename to backend/routers/v1/api/__init__.py index c8685447..bb7deff5 100644 --- a/nalgonda/routers/v1/api/__init__.py +++ b/backend/routers/v1/api/__init__.py @@ -1,5 +1,3 @@ -# nalgonda/routers/v1/api/__init__.py - from fastapi import APIRouter from .agency import agency_router diff --git a/nalgonda/routers/v1/api/agency.py b/backend/routers/v1/api/agency.py similarity index 88% rename from nalgonda/routers/v1/api/agency.py rename to backend/routers/v1/api/agency.py index fd5bee68..036cebed 100644 --- a/nalgonda/routers/v1/api/agency.py +++ b/backend/routers/v1/api/agency.py @@ -6,14 +6,14 @@ from fastapi import APIRouter, Depends, HTTPException from fastapi.params import Query -from nalgonda.dependencies.auth import get_current_user -from nalgonda.dependencies.dependencies import get_agency_manager -from nalgonda.models.agency_config import AgencyConfig -from nalgonda.models.auth import User -from nalgonda.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage -from nalgonda.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage -from nalgonda.services.agency_manager import AgencyManager -from nalgonda.services.env_vars_manager import ContextEnvVarsManager +from backend.dependencies.auth import get_current_user +from backend.dependencies.dependencies import get_agency_manager +from backend.models.agency_config import AgencyConfig +from backend.models.auth import User +from backend.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage +from backend.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage +from backend.services.agency_manager import AgencyManager +from backend.services.env_vars_manager import ContextEnvVarsManager logger = logging.getLogger(__name__) agency_router = APIRouter( diff --git a/nalgonda/routers/v1/api/agent.py b/backend/routers/v1/api/agent.py similarity index 88% rename from nalgonda/routers/v1/api/agent.py rename to backend/routers/v1/api/agent.py index 3e2a5b9a..6ce4fac0 100644 --- a/nalgonda/routers/v1/api/agent.py +++ b/backend/routers/v1/api/agent.py @@ -5,13 +5,13 @@ from fastapi import APIRouter, Body, Depends, HTTPException from fastapi.params import Query -from nalgonda.dependencies.auth import get_current_user -from nalgonda.dependencies.dependencies import get_agent_manager -from nalgonda.models.agent_config import AgentConfig -from nalgonda.models.auth import User -from nalgonda.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage -from nalgonda.services.agent_manager import AgentManager -from nalgonda.services.env_vars_manager import ContextEnvVarsManager +from backend.dependencies.auth import get_current_user +from backend.dependencies.dependencies import get_agent_manager +from backend.models.agent_config import AgentConfig +from backend.models.auth import User +from backend.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage +from backend.services.agent_manager import AgentManager +from backend.services.env_vars_manager import ContextEnvVarsManager logger = logging.getLogger(__name__) agent_router = APIRouter(tags=["agent"]) diff --git a/nalgonda/routers/v1/api/message.py b/backend/routers/v1/api/message.py similarity index 84% rename from nalgonda/routers/v1/api/message.py rename to backend/routers/v1/api/message.py index 34df010c..cb781514 100644 --- a/nalgonda/routers/v1/api/message.py +++ b/backend/routers/v1/api/message.py @@ -5,16 +5,16 @@ from fastapi import APIRouter, Depends, HTTPException -from nalgonda.dependencies.auth import get_current_user -from nalgonda.dependencies.dependencies import get_agency_manager -from nalgonda.models.auth import User -from nalgonda.models.request_models import SessionMessagePostRequest -from nalgonda.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.repositories.session_firestore_storage import SessionConfigFirestoreStorage -from nalgonda.services.agency_manager import AgencyManager -from nalgonda.services.env_vars_manager import ContextEnvVarsManager -from nalgonda.services.oai_client import get_openai_client +from backend.dependencies.auth import get_current_user +from backend.dependencies.dependencies import get_agency_manager +from backend.models.auth import User +from backend.models.request_models import SessionMessagePostRequest +from backend.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.repositories.session_firestore_storage import SessionConfigFirestoreStorage +from backend.services.agency_manager import AgencyManager +from backend.services.env_vars_manager import ContextEnvVarsManager +from backend.services.oai_client import get_openai_client logger = logging.getLogger(__name__) message_router = APIRouter( diff --git a/nalgonda/routers/v1/api/session.py b/backend/routers/v1/api/session.py similarity index 79% rename from nalgonda/routers/v1/api/session.py rename to backend/routers/v1/api/session.py index 7ce48a88..43c3175f 100644 --- a/nalgonda/routers/v1/api/session.py +++ b/backend/routers/v1/api/session.py @@ -4,15 +4,15 @@ from fastapi import APIRouter, Depends, HTTPException -from nalgonda.dependencies.auth import get_current_user -from nalgonda.dependencies.dependencies import get_agency_manager, get_session_manager -from nalgonda.models.auth import User -from nalgonda.models.request_models import SessionPostRequest -from nalgonda.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage -from nalgonda.repositories.session_firestore_storage import SessionConfigFirestoreStorage -from nalgonda.services.agency_manager import AgencyManager -from nalgonda.services.env_vars_manager import ContextEnvVarsManager -from nalgonda.services.session_manager import SessionManager +from backend.dependencies.auth import get_current_user +from backend.dependencies.dependencies import get_agency_manager, get_session_manager +from backend.models.auth import User +from backend.models.request_models import SessionPostRequest +from backend.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage +from backend.repositories.session_firestore_storage import SessionConfigFirestoreStorage +from backend.services.agency_manager import AgencyManager +from backend.services.env_vars_manager import ContextEnvVarsManager +from backend.services.session_manager import SessionManager logger = logging.getLogger(__name__) session_router = APIRouter( diff --git a/nalgonda/routers/v1/api/skill.py b/backend/routers/v1/api/skill.py similarity index 92% rename from nalgonda/routers/v1/api/skill.py rename to backend/routers/v1/api/skill.py index debaa103..7e8d4593 100644 --- a/nalgonda/routers/v1/api/skill.py +++ b/backend/routers/v1/api/skill.py @@ -4,12 +4,12 @@ from fastapi import APIRouter, Body, Depends, HTTPException, Query -from nalgonda.dependencies.auth import get_current_superuser, get_current_user -from nalgonda.models.auth import User -from nalgonda.models.request_models import SkillExecutePostRequest -from nalgonda.models.skill_config import SkillConfig -from nalgonda.repositories.skill_config_firestore_storage import SkillConfigFirestoreStorage -from nalgonda.services.skill_service import SkillService, generate_skill_description +from backend.dependencies.auth import get_current_superuser, get_current_user +from backend.models.auth import User +from backend.models.request_models import SkillExecutePostRequest +from backend.models.skill_config import SkillConfig +from backend.repositories.skill_config_firestore_storage import SkillConfigFirestoreStorage +from backend.services.skill_service import SkillService, generate_skill_description logger = logging.getLogger(__name__) skill_router = APIRouter(tags=["skill"]) diff --git a/nalgonda/routers/v1/api/version.py b/backend/routers/v1/api/version.py similarity index 88% rename from nalgonda/routers/v1/api/version.py rename to backend/routers/v1/api/version.py index 4a642f66..9b2054e0 100644 --- a/nalgonda/routers/v1/api/version.py +++ b/backend/routers/v1/api/version.py @@ -1,6 +1,6 @@ from fastapi import APIRouter -from nalgonda.version import VERSION +from backend.version import VERSION version_router = APIRouter( tags=["version"], diff --git a/nalgonda/routers/v1/websocket.py b/backend/routers/v1/websocket.py similarity index 92% rename from nalgonda/routers/v1/websocket.py rename to backend/routers/v1/websocket.py index 407cfc3c..0b598010 100644 --- a/nalgonda/routers/v1/websocket.py +++ b/backend/routers/v1/websocket.py @@ -6,10 +6,10 @@ from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect from websockets.exceptions import ConnectionClosedOK -from nalgonda.dependencies.dependencies import get_agency_manager -from nalgonda.services.agency_manager import AgencyManager -from nalgonda.services.env_vars_manager import ContextEnvVarsManager -from nalgonda.services.websocket_connection_manager import WebSocketConnectionManager +from backend.dependencies.dependencies import get_agency_manager +from backend.services.agency_manager import AgencyManager +from backend.services.env_vars_manager import ContextEnvVarsManager +from backend.services.websocket_connection_manager import WebSocketConnectionManager logger = logging.getLogger(__name__) connection_manager = WebSocketConnectionManager() diff --git a/nalgonda/services/README.md b/backend/services/README.md similarity index 95% rename from nalgonda/services/README.md rename to backend/services/README.md index 804c256a..fa2a6b5b 100644 --- a/nalgonda/services/README.md +++ b/backend/services/README.md @@ -1,6 +1,6 @@ # Services Directory -This directory contains critical components that constitute the backend services of the Nalgonda project. +This directory contains critical components that constitute the backend services of the AI in Hand Platform. These services enable various functionalities from managing entities like agencies and agents to handling caching, WebSocket connections, and threading. diff --git a/nalgonda/services/__init__.py b/backend/services/__init__.py similarity index 100% rename from nalgonda/services/__init__.py rename to backend/services/__init__.py diff --git a/nalgonda/services/agency_manager.py b/backend/services/agency_manager.py similarity index 93% rename from nalgonda/services/agency_manager.py rename to backend/services/agency_manager.py index f1b8bceb..36d440fb 100644 --- a/nalgonda/services/agency_manager.py +++ b/backend/services/agency_manager.py @@ -4,12 +4,12 @@ from agency_swarm import Agency, Agent -from nalgonda.models.agency_config import AgencyConfig -from nalgonda.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.agent_manager import AgentManager -from nalgonda.services.caching.redis_cache_manager import RedisCacheManager -from nalgonda.services.oai_client import get_openai_client +from backend.models.agency_config import AgencyConfig +from backend.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.agent_manager import AgentManager +from backend.services.caching.redis_cache_manager import RedisCacheManager +from backend.services.oai_client import get_openai_client logger = logging.getLogger(__name__) diff --git a/nalgonda/services/agent_manager.py b/backend/services/agent_manager.py similarity index 85% rename from nalgonda/services/agent_manager.py rename to backend/services/agent_manager.py index 4020d207..6930ceb1 100644 --- a/nalgonda/services/agent_manager.py +++ b/backend/services/agent_manager.py @@ -3,12 +3,12 @@ from agency_swarm import Agent -from nalgonda.custom_skills import SKILL_MAPPING -from nalgonda.models.agent_config import AgentConfig -from nalgonda.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.oai_client import get_openai_client -from nalgonda.settings import settings +from backend.custom_skills import SKILL_MAPPING +from backend.models.agent_config import AgentConfig +from backend.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.oai_client import get_openai_client +from backend.settings import settings logger = logging.getLogger(__name__) diff --git a/nalgonda/services/caching/__init__.py b/backend/services/caching/__init__.py similarity index 100% rename from nalgonda/services/caching/__init__.py rename to backend/services/caching/__init__.py diff --git a/nalgonda/services/caching/cache_manager.py b/backend/services/caching/cache_manager.py similarity index 100% rename from nalgonda/services/caching/cache_manager.py rename to backend/services/caching/cache_manager.py diff --git a/nalgonda/services/caching/redis_cache_manager.py b/backend/services/caching/redis_cache_manager.py similarity index 90% rename from nalgonda/services/caching/redis_cache_manager.py rename to backend/services/caching/redis_cache_manager.py index c07515f0..f4a2d83f 100644 --- a/nalgonda/services/caching/redis_cache_manager.py +++ b/backend/services/caching/redis_cache_manager.py @@ -3,8 +3,8 @@ from agency_swarm import Agency from redis import asyncio as aioredis -from nalgonda.constants import DEFAULT_CACHE_EXPIRATION -from nalgonda.services.caching.cache_manager import CacheManager +from backend.constants import DEFAULT_CACHE_EXPIRATION +from backend.services.caching.cache_manager import CacheManager class RedisCacheManager(CacheManager): diff --git a/nalgonda/services/encryption_service.py b/backend/services/encryption_service.py similarity index 100% rename from nalgonda/services/encryption_service.py rename to backend/services/encryption_service.py diff --git a/nalgonda/services/env_config_manager.py b/backend/services/env_config_manager.py similarity index 87% rename from nalgonda/services/env_config_manager.py rename to backend/services/env_config_manager.py index 1eaa558f..6af59c06 100644 --- a/nalgonda/services/env_config_manager.py +++ b/backend/services/env_config_manager.py @@ -1,9 +1,9 @@ import logging -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.encryption_service import EncryptionService -from nalgonda.services.env_vars_manager import ContextEnvVarsManager -from nalgonda.settings import settings +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.encryption_service import EncryptionService +from backend.services.env_vars_manager import ContextEnvVarsManager +from backend.settings import settings logger = logging.getLogger(__name__) diff --git a/nalgonda/services/env_vars_manager.py b/backend/services/env_vars_manager.py similarity index 99% rename from nalgonda/services/env_vars_manager.py rename to backend/services/env_vars_manager.py index c88fb1f7..3c3a2d48 100644 --- a/nalgonda/services/env_vars_manager.py +++ b/backend/services/env_vars_manager.py @@ -12,6 +12,7 @@ # It all turns into one line when using the ContextEnvVarsManager: ContextEnvVarsManager.set('owner_id', owner_id) """ + from contextvars import ContextVar from typing import Any diff --git a/nalgonda/services/oai_client.py b/backend/services/oai_client.py similarity index 62% rename from nalgonda/services/oai_client.py rename to backend/services/oai_client.py index ac7880ad..f7965b95 100644 --- a/nalgonda/services/oai_client.py +++ b/backend/services/oai_client.py @@ -1,8 +1,8 @@ import instructor import openai -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.env_config_manager import EnvConfigManager +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.env_config_manager import EnvConfigManager def get_openai_client(env_config_storage: EnvConfigFirestoreStorage): diff --git a/nalgonda/services/session_manager.py b/backend/services/session_manager.py similarity index 89% rename from nalgonda/services/session_manager.py rename to backend/services/session_manager.py index fa1212ba..1785c3d3 100644 --- a/nalgonda/services/session_manager.py +++ b/backend/services/session_manager.py @@ -3,10 +3,10 @@ from agency_swarm import Agency, Agent from agency_swarm.threads import Thread -from nalgonda.models.session_config import SessionConfig -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.repositories.session_firestore_storage import SessionConfigFirestoreStorage -from nalgonda.services.oai_client import get_openai_client +from backend.models.session_config import SessionConfig +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.repositories.session_firestore_storage import SessionConfigFirestoreStorage +from backend.services.oai_client import get_openai_client class SessionManager: diff --git a/nalgonda/services/skill_service.py b/backend/services/skill_service.py similarity index 90% rename from nalgonda/services/skill_service.py rename to backend/services/skill_service.py index 5f950f40..e802a98a 100644 --- a/nalgonda/services/skill_service.py +++ b/backend/services/skill_service.py @@ -3,9 +3,9 @@ from agency_swarm import BaseTool -from nalgonda import custom_skills -from nalgonda.settings import settings -from nalgonda.utils import get_chat_completion +from backend import custom_skills +from backend.settings import settings +from backend.utils import get_chat_completion SKILL_SUMMARY_SYSTEM_MESSAGE = """\ As a supportive assistant, ensure your responses are concise, @@ -39,7 +39,7 @@ class SkillService: def execute_skill(self, skill_name: str, user_prompt: str): """ - Import the skill from nalgonda.custom_skills package, initialize it (using GPT to fill in kwargs), and run it + Import the skill from custom_skills package, initialize it (using GPT to fill in kwargs), and run it """ skill_class = self._get_skill_class(skill_name) skill_args = self._get_skill_arguments(json.dumps(skill_class.openai_schema), user_prompt) @@ -57,7 +57,7 @@ def _get_skill_arguments(self, function_spec: str, user_prompt: str) -> str: @staticmethod def _get_skill_class(skill_name: str) -> BaseTool: - """Get a skill function by name from nalgonda.custom_skills""" + """Get a skill function by name from custom_skills""" try: return getattr(custom_skills, skill_name) except AttributeError as e: diff --git a/nalgonda/services/websocket_connection_manager.py b/backend/services/websocket_connection_manager.py similarity index 100% rename from nalgonda/services/websocket_connection_manager.py rename to backend/services/websocket_connection_manager.py diff --git a/nalgonda/settings.py b/backend/settings.py similarity index 100% rename from nalgonda/settings.py rename to backend/settings.py diff --git a/nalgonda/utils/__init__.py b/backend/utils/__init__.py similarity index 95% rename from nalgonda/utils/__init__.py rename to backend/utils/__init__.py index c971b7eb..0ded762f 100644 --- a/nalgonda/utils/__init__.py +++ b/backend/utils/__init__.py @@ -3,8 +3,8 @@ import tiktoken -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.oai_client import get_openai_client +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.oai_client import get_openai_client logger = logging.getLogger(__name__) diff --git a/nalgonda/utils/logging_utils/__init__.py b/backend/utils/logging_utils/__init__.py similarity index 96% rename from nalgonda/utils/logging_utils/__init__.py rename to backend/utils/logging_utils/__init__.py index f829c307..3debde20 100644 --- a/nalgonda/utils/logging_utils/__init__.py +++ b/backend/utils/logging_utils/__init__.py @@ -4,7 +4,7 @@ import logging.handlers import queue -from nalgonda.utils.logging_utils.json_formatter import JSONFormatter +from backend.utils.logging_utils.json_formatter import JSONFormatter def setup_logging(): diff --git a/nalgonda/utils/logging_utils/json_formatter.py b/backend/utils/logging_utils/json_formatter.py similarity index 100% rename from nalgonda/utils/logging_utils/json_formatter.py rename to backend/utils/logging_utils/json_formatter.py diff --git a/backend/version.py b/backend/version.py new file mode 100644 index 00000000..867e4b14 --- /dev/null +++ b/backend/version.py @@ -0,0 +1 @@ +VERSION = "0.3.0" diff --git a/frontend/package.json b/frontend/package.json index 3d07eece..c26b4933 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "ai-in-hand-platform-ui", - "version": "0.2.0", + "version": "0.3.0", "private": true, "description": "AI in Hand Platform - Build and Test Your AI Workforce", "author": "AI in Hand Team", @@ -11,7 +11,7 @@ "develop": "gatsby clean && gatsby develop", "dev": "npm run develop", "start": "gatsby clean && gatsby develop", - "build": "gatsby clean && rm -rf ../nalgonda/ui && PREFIX_PATH_VALUE='' gatsby build --prefix-paths && cp -r public/ ../nalgonda/ui", + "build": "gatsby clean && rm -rf ../backend/ui && PREFIX_PATH_VALUE='' gatsby build --prefix-paths && cp -r public/ ../backend/ui", "serve": "gatsby serve", "clean": "gatsby clean", "typecheck": "tsc --noEmit" diff --git a/frontend/src/components/views/playground/ra.tsx b/frontend/src/components/views/playground/ra.tsx index c69a6f97..8772d4f0 100644 --- a/frontend/src/components/views/playground/ra.tsx +++ b/frontend/src/components/views/playground/ra.tsx @@ -32,7 +32,7 @@ const RAView = () => { const { user } = React.useContext(appContext); const serverUrl = getServerUrl(); - const fetchMessagesUrl = `${serverUrl}/message?session_id=${session?.id}`; + const fetchMessagesUrl = `${serverUrl}/message/list?session_id=${session?.id}`; const workflowConfig = useConfigStore((state) => state.workflowConfig); const fetchMessages = () => { diff --git a/nalgonda/custom_skills/__init__.py b/nalgonda/custom_skills/__init__.py deleted file mode 100644 index cfabf4c8..00000000 --- a/nalgonda/custom_skills/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# Mapping skill names to actual skill classes -from agency_swarm.tools import CodeInterpreter, Retrieval - -from nalgonda.custom_skills.build_directory_tree import BuildDirectoryTree -from nalgonda.custom_skills.generate_proposal import GenerateProposal -from nalgonda.custom_skills.print_all_files_in_path import PrintAllFilesInPath -from nalgonda.custom_skills.print_file_contents import PrintFileContents -from nalgonda.custom_skills.save_lead_to_airtable import SaveLeadToAirtable -from nalgonda.custom_skills.search_web import SearchWeb -from nalgonda.custom_skills.summarize_all_code_in_path import SummarizeAllCodeInPath -from nalgonda.custom_skills.summarize_code import SummarizeCode -from nalgonda.custom_skills.write_and_save_program import WriteAndSaveProgram - -SKILL_MAPPING = { - "CodeInterpreter": CodeInterpreter, - "Retrieval": Retrieval, - "BuildDirectoryTree": BuildDirectoryTree, - "GenerateProposal": GenerateProposal, - "PrintAllFilesInPath": PrintAllFilesInPath, - "PrintFileContents": PrintFileContents, - "SaveLeadToAirtable": SaveLeadToAirtable, - "SearchWeb": SearchWeb, - "SummarizeAllCodeInPath": SummarizeAllCodeInPath, - "SummarizeCode": SummarizeCode, - "WriteAndSaveProgram": WriteAndSaveProgram, -} diff --git a/nalgonda/exceptions.py b/nalgonda/exceptions.py deleted file mode 100644 index 5908bc5e..00000000 --- a/nalgonda/exceptions.py +++ /dev/null @@ -1,2 +0,0 @@ -# exceptions.py - Custom exceptions for the Nalgonda project -# This file is reserved for custom exception classes. diff --git a/nalgonda/version.py b/nalgonda/version.py deleted file mode 100644 index 6c5007c7..00000000 --- a/nalgonda/version.py +++ /dev/null @@ -1 +0,0 @@ -VERSION = "0.2.0" diff --git a/package.json b/package.json index 7c95f23b..dd4f1ec7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ai-in-hand", - "version": "0.1.0", + "version": "0.3.0", "description": "Root package.json for Heroku deployment", "private": true, "scripts": { diff --git a/pyproject.toml b/pyproject.toml index ab7ec49e..bc7edb32 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] -name = "nalgonda" -version = "0.2.0" -description = "Nalgonda is a FastAPI app to manage swarm agencies" +name = "ai-in-hand" +version = "0.3.0" +description = "A FastAPI app to manage swarm agency configurations." authors = [ "AI in Hand " ] @@ -44,14 +44,16 @@ exclude = [".cache"] [tool.ruff] # https://beta.ruff.rs/docs/configuration/ line-length = 120 -select = ['E', 'W', 'F', 'I', 'B', 'C4', 'ARG', 'SIM', 'UP'] -ignore = ['W291', 'W292', 'W293'] target-version = "py311" +[tool.ruff.lint] +ignore = ['W291', 'W292', 'W293'] +select = ['E', 'W', 'F', 'I', 'B', 'C4', 'ARG', 'SIM', 'UP'] + [tool.ruff.lint.isort] combine-as-imports = true -[tool.ruff.flake8-bugbear] +[tool.ruff.lint.flake8-bugbear] extend-immutable-calls = ["fastapi.Depends", "fastapi.params.Depends", "fastapi.Body", "fastapi.params.Body"] [build-system] diff --git a/tests/__init__.py b/tests/__init__.py index 38b05f98..3de55de9 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,9 +1,9 @@ import sys from unittest.mock import Mock -import nalgonda.services.oai_client +import backend.services.oai_client -original_oai_client = nalgonda.services.oai_client +original_oai_client = backend.services.oai_client oai_mock = Mock() -sys.modules["nalgonda.services.oai_client"] = oai_mock +sys.modules["backend.services.oai_client"] = oai_mock diff --git a/tests/conftest.py b/tests/conftest.py index eafd1326..0b6fc538 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ import pytest -from nalgonda.settings import settings +from backend.settings import settings from tests.test_utils.constants import TEST_ENCRYPTION_KEY from tests.test_utils.mock_firestore_client import MockFirestoreClient @@ -23,9 +23,9 @@ def mock_firestore_client(): def recover_oai_client(): from . import oai_mock, original_oai_client - sys.modules["nalgonda.services.oai_client"] = original_oai_client + sys.modules["backend.services.oai_client"] = original_oai_client yield - sys.modules["nalgonda.services.oai_client"] = oai_mock + sys.modules["backend.services.oai_client"] = oai_mock @pytest.fixture(autouse=True) @@ -43,11 +43,11 @@ def mock_init_oai(): @pytest.fixture(autouse=True) def mock_skill_mapping(): - with patch("nalgonda.services.agent_manager.SKILL_MAPPING", MOCK_SKILL_MAPPING): + with patch("backend.services.agent_manager.SKILL_MAPPING", MOCK_SKILL_MAPPING): yield @pytest.fixture def mock_setup_logging(): - with patch("nalgonda.utils.logging_utils.setup_logging"): + with patch("backend.utils.logging_utils.setup_logging"): yield diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index 4e296eb8..d6609e71 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -1,14 +1,14 @@ import pytest from fastapi.testclient import TestClient -from nalgonda.dependencies.auth import get_current_user +from backend.dependencies.auth import get_current_user from tests.test_utils import get_current_superuser_override, get_current_user_override @pytest.mark.usefixtures("mock_setup_logging") @pytest.fixture def mock_get_current_user(): - from nalgonda.main import v1_api_app + from backend.main import v1_api_app v1_api_app.dependency_overrides[get_current_user] = get_current_user_override yield @@ -18,7 +18,7 @@ def mock_get_current_user(): @pytest.mark.usefixtures("mock_setup_logging") @pytest.fixture def mock_get_current_superuser(): - from nalgonda.main import v1_api_app + from backend.main import v1_api_app v1_api_app.dependency_overrides[get_current_user] = get_current_superuser_override yield @@ -28,7 +28,7 @@ def mock_get_current_superuser(): @pytest.mark.usefixtures("mock_setup_logging") @pytest.fixture def client(): - from nalgonda.main import app + from backend.main import app with TestClient(app) as client: yield client diff --git a/tests/functional/test_logging_utils.py b/tests/functional/test_logging_utils.py index 5ce6e468..5604212f 100644 --- a/tests/functional/test_logging_utils.py +++ b/tests/functional/test_logging_utils.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.utils.logging_utils import setup_logging +from backend.utils.logging_utils import setup_logging @pytest.fixture diff --git a/tests/functional/v1/api/test_agency_endpoints.py b/tests/functional/v1/api/test_agency_endpoints.py index b9e35751..ecd01520 100644 --- a/tests/functional/v1/api/test_agency_endpoints.py +++ b/tests/functional/v1/api/test_agency_endpoints.py @@ -2,8 +2,8 @@ import pytest -from nalgonda.models.agency_config import AgencyConfig -from nalgonda.models.agent_config import AgentConfig +from backend.models.agency_config import AgencyConfig +from backend.models.agent_config import AgentConfig from tests.test_utils import TEST_USER_ID from tests.test_utils.constants import TEST_AGENCY_ID @@ -67,7 +67,7 @@ def test_create_agency_success(client): } with patch( - "nalgonda.services.agency_manager.AgencyManager.update_or_create_agency", new_callable=AsyncMock + "backend.services.agency_manager.AgencyManager.update_or_create_agency", new_callable=AsyncMock ) as mock_update_or_create_agency: mock_update_or_create_agency.return_value = TEST_AGENCY_ID response = client.put("/v1/api/agency", json=template_config) @@ -98,7 +98,7 @@ def test_update_agency_success(client, mock_firestore_client): new_data.update({"shared_instructions": "Updated Manifesto"}) with patch( - "nalgonda.services.agency_manager.AgencyManager.repopulate_cache_and_update_assistants", new_callable=AsyncMock + "backend.services.agency_manager.AgencyManager.repopulate_cache_and_update_assistants", new_callable=AsyncMock ) as mock_repopulate_cache: response = client.put("/v1/api/agency", json=new_data) diff --git a/tests/functional/v1/api/test_agent_endpoints.py b/tests/functional/v1/api/test_agent_endpoints.py index 17fb1c5a..1d85522a 100644 --- a/tests/functional/v1/api/test_agent_endpoints.py +++ b/tests/functional/v1/api/test_agent_endpoints.py @@ -42,7 +42,7 @@ def test_get_agent_config(client, agent_config_data, mock_firestore_client): def test_update_agent_config_success(client, agent_config_data, mock_firestore_client): mock_firestore_client.setup_mock_data("agent_configs", AGENT_ID, agent_config_data) - with patch("nalgonda.services.agent_manager.AgentManager") as mock_agent_manager: + with patch("backend.services.agent_manager.AgentManager") as mock_agent_manager: mock_agent_manager.return_value = AsyncMock() mock_agent_manager.return_value.create_or_update_agent.return_value = AGENT_ID diff --git a/tests/functional/v1/api/test_message_endpoints.py b/tests/functional/v1/api/test_message_endpoints.py index 0cc13b48..f5ee52b3 100644 --- a/tests/functional/v1/api/test_message_endpoints.py +++ b/tests/functional/v1/api/test_message_endpoints.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.services.agency_manager import AgencyManager +from backend.services.agency_manager import AgencyManager from tests.test_utils import TEST_USER_ID from tests.test_utils.constants import TEST_AGENCY_ID @@ -89,7 +89,7 @@ def mock_session_firestore_storage(mock_firestore_client): @pytest.fixture def mock_openai_client(): - with patch("nalgonda.routers.v1.api.message.get_openai_client") as mock: + with patch("backend.routers.v1.api.message.get_openai_client") as mock: mock.return_value.beta.threads.messages.list.return_value = ["Message 1", "Message 2"] yield mock diff --git a/tests/functional/v1/api/test_session_endpoints.py b/tests/functional/v1/api/test_session_endpoints.py index 34d5a642..4fad33b5 100644 --- a/tests/functional/v1/api/test_session_endpoints.py +++ b/tests/functional/v1/api/test_session_endpoints.py @@ -3,9 +3,9 @@ import pytest -from nalgonda.models.request_models import SessionPostRequest -from nalgonda.services.agency_manager import AgencyManager -from nalgonda.services.session_manager import SessionManager +from backend.models.request_models import SessionPostRequest +from backend.services.agency_manager import AgencyManager +from backend.services.session_manager import SessionManager from tests.test_utils import TEST_USER_ID from tests.test_utils.constants import TEST_AGENCY_ID @@ -31,11 +31,13 @@ def test_get_session_list(session_config_data, client, mock_firestore_client): @pytest.mark.usefixtures("mock_get_current_user") def test_create_session_success(client, mock_firestore_client): - with patch.object( - AgencyManager, "get_agency", AsyncMock(return_value=MagicMock()) - ) as mock_get_agency, patch.object( - SessionManager, "_create_threads", MagicMock(return_value="new_session_id") - ) as mock_create_threads, patch.object(AgencyManager, "cache_agency", AsyncMock()) as mock_cache_agency: + with ( + patch.object(AgencyManager, "get_agency", AsyncMock(return_value=MagicMock())) as mock_get_agency, + patch.object( + SessionManager, "_create_threads", MagicMock(return_value="new_session_id") + ) as mock_create_threads, + patch.object(AgencyManager, "cache_agency", AsyncMock()) as mock_cache_agency, + ): # mock Firestore to pass the security owner_id check mock_firestore_client.setup_mock_data( "agency_configs", TEST_AGENCY_ID, {"name": "Test agency", "owner_id": TEST_USER_ID} diff --git a/tests/functional/v1/api/test_skill_endpoints.py b/tests/functional/v1/api/test_skill_endpoints.py index 69c3a9fd..e890071b 100644 --- a/tests/functional/v1/api/test_skill_endpoints.py +++ b/tests/functional/v1/api/test_skill_endpoints.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.repositories.skill_config_firestore_storage import SkillConfigFirestoreStorage +from backend.repositories.skill_config_firestore_storage import SkillConfigFirestoreStorage from tests.test_utils import TEST_USER_ID @@ -68,7 +68,7 @@ def test_approve_skill(skill_config_data, client, mock_firestore_client): assert updated_config["approved"] is True -@patch("nalgonda.routers.v1.api.skill.generate_skill_description", MagicMock(return_value="Test description")) +@patch("backend.routers.v1.api.skill.generate_skill_description", MagicMock(return_value="Test description")) @pytest.mark.usefixtures("mock_get_current_user") def test_update_skill_config_success(skill_config_data, client, mock_firestore_client): mock_firestore_client.setup_mock_data("skill_configs", "skill1", skill_config_data) @@ -99,7 +99,7 @@ def test_update_skill_config_owner_id_mismatch(skill_config_data, client, mock_f @pytest.mark.usefixtures("mock_get_current_user") -@patch("nalgonda.services.skill_service.SkillService.execute_skill", MagicMock(return_value="Execution result")) +@patch("backend.services.skill_service.SkillService.execute_skill", MagicMock(return_value="Execution result")) def test_execute_skill_success(skill_config_data, client, mock_firestore_client): skill_config_data["approved"] = True mock_firestore_client.setup_mock_data("skill_configs", skill_config_data["id"], skill_config_data) diff --git a/tests/test_utils/__init__.py b/tests/test_utils/__init__.py index 8762a5e8..8a56eb8b 100644 --- a/tests/test_utils/__init__.py +++ b/tests/test_utils/__init__.py @@ -1,4 +1,4 @@ -from nalgonda.models.auth import User +from backend.models.auth import User from tests.test_utils.constants import TEST_USER_EMAIL, TEST_USER_ID diff --git a/tests/unit/custom_skills/test_build_directory_tree.py b/tests/unit/custom_skills/test_build_directory_tree.py index f480d14b..dbf17b67 100644 --- a/tests/unit/custom_skills/test_build_directory_tree.py +++ b/tests/unit/custom_skills/test_build_directory_tree.py @@ -1,6 +1,6 @@ from pathlib import Path -from nalgonda.custom_skills import BuildDirectoryTree +from backend.custom_skills import BuildDirectoryTree def test_build_directory_tree_with_py_extension(temp_dir): diff --git a/tests/unit/custom_skills/test_generate_proposal.py b/tests/unit/custom_skills/test_generate_proposal.py index bc125f61..8bdde957 100644 --- a/tests/unit/custom_skills/test_generate_proposal.py +++ b/tests/unit/custom_skills/test_generate_proposal.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.custom_skills.generate_proposal import GenerateProposal +from backend.custom_skills.generate_proposal import GenerateProposal @pytest.fixture @@ -13,7 +13,7 @@ class MockOpenAIResponse: return MockOpenAIResponse() -@patch("nalgonda.utils.get_openai_client") +@patch("backend.utils.get_openai_client") def test_generate_proposal_with_valid_brief(mock_openai_client, mock_openai_response): mock_openai_client.return_value.chat.completions.create.return_value = mock_openai_response proposal_skill = GenerateProposal(project_brief="Create a web application.") @@ -22,7 +22,7 @@ def test_generate_proposal_with_valid_brief(mock_openai_client, mock_openai_resp mock_openai_client.assert_called_once() -@patch("nalgonda.utils.get_openai_client", side_effect=Exception("API failed")) +@patch("backend.utils.get_openai_client", side_effect=Exception("API failed")) def test_generate_proposal_with_api_failure(mock_openai_client): proposal_skill = GenerateProposal(project_brief="Create a VR game.") with pytest.raises(Exception) as exc_info: diff --git a/tests/unit/custom_skills/test_print_all_files_in_path.py b/tests/unit/custom_skills/test_print_all_files_in_path.py index 5ac9e694..dfafb6a4 100644 --- a/tests/unit/custom_skills/test_print_all_files_in_path.py +++ b/tests/unit/custom_skills/test_print_all_files_in_path.py @@ -1,6 +1,6 @@ import pytest -from nalgonda.custom_skills import PrintAllFilesInPath +from backend.custom_skills import PrintAllFilesInPath def test_print_all_files_no_extension_filter(temp_dir): diff --git a/tests/unit/custom_skills/test_print_file_contents.py b/tests/unit/custom_skills/test_print_file_contents.py index bbac90a8..072e978c 100644 --- a/tests/unit/custom_skills/test_print_file_contents.py +++ b/tests/unit/custom_skills/test_print_file_contents.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.custom_skills import PrintFileContents +from backend.custom_skills import PrintFileContents @pytest.fixture diff --git a/tests/unit/custom_skills/test_save_lead_to_airtable.py b/tests/unit/custom_skills/test_save_lead_to_airtable.py index a2a3c98b..5622e73a 100644 --- a/tests/unit/custom_skills/test_save_lead_to_airtable.py +++ b/tests/unit/custom_skills/test_save_lead_to_airtable.py @@ -1,10 +1,10 @@ from unittest.mock import MagicMock, patch -from nalgonda.custom_skills.save_lead_to_airtable import SaveLeadToAirtable +from backend.custom_skills.save_lead_to_airtable import SaveLeadToAirtable @patch( - "nalgonda.custom_skills.save_lead_to_airtable.EnvConfigManager.get_by_key", + "backend.custom_skills.save_lead_to_airtable.EnvConfigManager.get_by_key", side_effect=["fake_base_id", "fake_table_id", "fake_token"], ) @patch("pyairtable.Api.table") @@ -22,7 +22,7 @@ def test_save_lead_to_airtable_success(mock_table, mock_get_by_key): @patch( - "nalgonda.custom_skills.save_lead_to_airtable.EnvConfigManager.get_by_key", + "backend.custom_skills.save_lead_to_airtable.EnvConfigManager.get_by_key", side_effect=["fake_base_id", "fake_table_id", "fake_token"], ) @patch("pyairtable.Api.table") diff --git a/tests/unit/custom_skills/test_summarize_all_code_in_path.py b/tests/unit/custom_skills/test_summarize_all_code_in_path.py index 4183b0a4..6cc7a5ed 100644 --- a/tests/unit/custom_skills/test_summarize_all_code_in_path.py +++ b/tests/unit/custom_skills/test_summarize_all_code_in_path.py @@ -3,7 +3,7 @@ import pytest -from nalgonda.custom_skills import SummarizeAllCodeInPath +from backend.custom_skills import SummarizeAllCodeInPath @pytest.fixture @@ -17,7 +17,7 @@ class MockOpenAIResponse: return MockOpenAIResponse() -@patch("nalgonda.utils.get_openai_client") +@patch("backend.utils.get_openai_client") def test_summarize_all_code_in_path_with_valid_codebase(mock_openai_client, mock_openai_response, tmp_path): # Create a simple Python file (tmp_path / "test.py").write_text('print("Hello, World!")') @@ -29,7 +29,7 @@ def test_summarize_all_code_in_path_with_valid_codebase(mock_openai_client, mock mock_openai_client.assert_called_once() -@patch("nalgonda.utils.get_openai_client", side_effect=Exception("API failed")) +@patch("backend.utils.get_openai_client", side_effect=Exception("API failed")) def test_summarize_all_code_in_path_with_api_failure(mock_openai_client, tmp_path): # Create a simple Python file (tmp_path / "test.py").write_text('print("Hello, World!")') diff --git a/tests/unit/custom_skills/test_summarize_code.py b/tests/unit/custom_skills/test_summarize_code.py index f5d8a859..7477507c 100644 --- a/tests/unit/custom_skills/test_summarize_code.py +++ b/tests/unit/custom_skills/test_summarize_code.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.custom_skills.summarize_code import SummarizeCode +from backend.custom_skills.summarize_code import SummarizeCode @pytest.fixture @@ -16,7 +16,7 @@ class MockOpenAIResponse: return MockOpenAIResponse() -@patch("nalgonda.utils.get_openai_client") +@patch("backend.utils.get_openai_client") def test_summarize_code_with_valid_file(mock_openai_client, mock_openai_response, tmp_path): # Create a simple Python file file_path = tmp_path / "test.py" @@ -29,7 +29,7 @@ def test_summarize_code_with_valid_file(mock_openai_client, mock_openai_response mock_openai_client.assert_called_once() -@patch("nalgonda.utils.get_openai_client", side_effect=Exception("API failed")) +@patch("backend.utils.get_openai_client", side_effect=Exception("API failed")) def test_summarize_code_with_api_failure(mock_openai_client, tmp_path): file_path = tmp_path / "test.py" file_path.write_text('print("Hello, World!")') diff --git a/tests/unit/custom_skills/test_utils.py b/tests/unit/custom_skills/test_utils.py index f82304e3..3b051fc8 100644 --- a/tests/unit/custom_skills/test_utils.py +++ b/tests/unit/custom_skills/test_utils.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.custom_skills.utils import check_directory_traversal +from backend.custom_skills.utils import check_directory_traversal @pytest.mark.parametrize("path", [".", "tests", "tests/custom_skills"]) diff --git a/tests/unit/custom_skills/test_write_and_save_program.py b/tests/unit/custom_skills/test_write_and_save_program.py index a175d81d..1a698a4b 100644 --- a/tests/unit/custom_skills/test_write_and_save_program.py +++ b/tests/unit/custom_skills/test_write_and_save_program.py @@ -1,12 +1,12 @@ from pathlib import Path from unittest.mock import mock_open, patch -from nalgonda.constants import AGENCY_DATA_DIR -from nalgonda.custom_skills.write_and_save_program import File, WriteAndSaveProgram +from backend.constants import AGENCY_DATA_DIR +from backend.custom_skills.write_and_save_program import File, WriteAndSaveProgram from tests.test_utils.constants import TEST_AGENCY_ID -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_AGENCY_ID) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_AGENCY_ID) @patch("builtins.open", new_callable=mock_open) @patch("pathlib.Path.mkdir") def test_write_and_save_program_with_valid_files(mock_get, mock_mkdir, mock_file): diff --git a/tests/unit/dependencies/test_auth.py b/tests/unit/dependencies/test_auth.py index 35f2ff18..ca83f648 100644 --- a/tests/unit/dependencies/test_auth.py +++ b/tests/unit/dependencies/test_auth.py @@ -12,8 +12,8 @@ UserDisabledError, ) -from nalgonda.dependencies.auth import get_current_superuser, get_current_user -from nalgonda.models.auth import User +from backend.dependencies.auth import get_current_superuser, get_current_user +from backend.models.auth import User user_data: dict[str, Any] = { "uid": "testuser", @@ -23,7 +23,7 @@ @pytest.fixture() def mock_verify_id_token(): - with patch("nalgonda.dependencies.auth.auth.verify_id_token") as mock: + with patch("backend.dependencies.auth.auth.verify_id_token") as mock: mock.return_value = user_data yield mock diff --git a/tests/unit/models/test_agency_config_model.py b/tests/unit/models/test_agency_config_model.py index df6bed5a..acfa8a9c 100644 --- a/tests/unit/models/test_agency_config_model.py +++ b/tests/unit/models/test_agency_config_model.py @@ -1,6 +1,6 @@ import pytest -from nalgonda.models.agency_config import AgencyConfig +from backend.models.agency_config import AgencyConfig def test_empty_agency_chart(): diff --git a/tests/unit/repositories/test_agency_config_firestore_storage.py b/tests/unit/repositories/test_agency_config_firestore_storage.py index 1024615b..a6f28922 100644 --- a/tests/unit/repositories/test_agency_config_firestore_storage.py +++ b/tests/unit/repositories/test_agency_config_firestore_storage.py @@ -1,7 +1,7 @@ import pytest -from nalgonda.models.agency_config import AgencyConfig -from nalgonda.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage +from backend.models.agency_config import AgencyConfig +from backend.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage from tests.test_utils.constants import TEST_AGENCY_ID, TEST_USER_ID diff --git a/tests/unit/repositories/test_agent_config_firestore_storage.py b/tests/unit/repositories/test_agent_config_firestore_storage.py index 2b5d59f0..ea685334 100644 --- a/tests/unit/repositories/test_agent_config_firestore_storage.py +++ b/tests/unit/repositories/test_agent_config_firestore_storage.py @@ -1,7 +1,7 @@ import pytest -from nalgonda.models.agent_config import AgentConfig -from nalgonda.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage +from backend.models.agent_config import AgentConfig +from backend.repositories.agent_config_firestore_storage import AgentConfigFirestoreStorage from tests.test_utils import TEST_USER_ID diff --git a/tests/unit/repositories/test_env_config_firestore_storage.py b/tests/unit/repositories/test_env_config_firestore_storage.py index 77b49eff..e5d50d12 100644 --- a/tests/unit/repositories/test_env_config_firestore_storage.py +++ b/tests/unit/repositories/test_env_config_firestore_storage.py @@ -1,6 +1,6 @@ import pytest -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage from tests.test_utils import TEST_USER_ID diff --git a/tests/unit/repositories/test_session_firestore_storage.py b/tests/unit/repositories/test_session_firestore_storage.py index 5f2a2b75..a8a9fe5e 100644 --- a/tests/unit/repositories/test_session_firestore_storage.py +++ b/tests/unit/repositories/test_session_firestore_storage.py @@ -1,7 +1,7 @@ import pytest -from nalgonda.models.session_config import SessionConfig -from nalgonda.repositories.session_firestore_storage import SessionConfigFirestoreStorage +from backend.models.session_config import SessionConfig +from backend.repositories.session_firestore_storage import SessionConfigFirestoreStorage from tests.test_utils import TEST_USER_ID diff --git a/tests/unit/repositories/test_skill_config_firestore_storage.py b/tests/unit/repositories/test_skill_config_firestore_storage.py index c00d8bc8..ff6def57 100644 --- a/tests/unit/repositories/test_skill_config_firestore_storage.py +++ b/tests/unit/repositories/test_skill_config_firestore_storage.py @@ -1,7 +1,7 @@ import pytest -from nalgonda.models.skill_config import SkillConfig -from nalgonda.repositories.skill_config_firestore_storage import SkillConfigFirestoreStorage +from backend.models.skill_config import SkillConfig +from backend.repositories.skill_config_firestore_storage import SkillConfigFirestoreStorage from tests.test_utils import TEST_USER_ID diff --git a/tests/unit/services/test_agency_manager.py b/tests/unit/services/test_agency_manager.py index 2ed96e36..864f8044 100644 --- a/tests/unit/services/test_agency_manager.py +++ b/tests/unit/services/test_agency_manager.py @@ -3,10 +3,10 @@ import pytest from agency_swarm import Agency, Agent -from nalgonda.models.agency_config import AgencyConfig -from nalgonda.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.agency_manager import AgencyManager +from backend.models.agency_config import AgencyConfig +from backend.repositories.agency_config_firestore_storage import AgencyConfigFirestoreStorage +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.agency_manager import AgencyManager from tests.test_utils import TEST_USER_ID from tests.test_utils.constants import TEST_AGENCY_ID @@ -24,8 +24,9 @@ def agency_manager(): @pytest.mark.asyncio async def test_get_agency_from_cache(agency_manager): - with patch.object(agency_manager.cache_manager, "get", new_callable=AsyncMock) as mock_get, patch.object( - agency_manager, "_set_client_objects", new_callable=Mock + with ( + patch.object(agency_manager.cache_manager, "get", new_callable=AsyncMock) as mock_get, + patch.object(agency_manager, "_set_client_objects", new_callable=Mock), ): mock_get.return_value = MagicMock(spec=Agency) @@ -36,9 +37,13 @@ async def test_get_agency_from_cache(agency_manager): @pytest.mark.asyncio async def test_get_agency_repopulate_cache(agency_manager): - with patch.object(agency_manager.cache_manager, "get", new_callable=AsyncMock) as mock_get, patch.object( - agency_manager, "repopulate_cache_and_update_assistants", new_callable=AsyncMock - ) as mock_repopulate, patch.object(agency_manager, "_set_client_objects", new_callable=Mock): + with ( + patch.object(agency_manager.cache_manager, "get", new_callable=AsyncMock) as mock_get, + patch.object( + agency_manager, "repopulate_cache_and_update_assistants", new_callable=AsyncMock + ) as mock_repopulate, + patch.object(agency_manager, "_set_client_objects", new_callable=Mock), + ): mock_get.side_effect = [None, MagicMock(spec=Agency)] agency = await agency_manager.get_agency(TEST_AGENCY_ID) @@ -92,13 +97,15 @@ async def test_repopulate_cache_success(agency_manager, mock_firestore_client): ) agent = MagicMock(spec=Agent) - with patch( - "nalgonda.services.agency_manager.AgencyManager.load_and_construct_agents", new_callable=AsyncMock - ) as mock_load_agents, patch( - "nalgonda.services.agency_manager.AgencyManager.construct_agency" - ) as mock_construct_agency, patch( - "nalgonda.services.agency_manager.AgencyManager.cache_agency", new_callable=AsyncMock - ) as mock_cache_agency: + with ( + patch( + "backend.services.agency_manager.AgencyManager.load_and_construct_agents", new_callable=AsyncMock + ) as mock_load_agents, + patch("backend.services.agency_manager.AgencyManager.construct_agency") as mock_construct_agency, + patch( + "backend.services.agency_manager.AgencyManager.cache_agency", new_callable=AsyncMock + ) as mock_cache_agency, + ): mock_firestore_client.setup_mock_data("agency_configs", agency_config.agency_id, agency_config) mock_load_agents.return_value = {"agent1": agent} mock_construct_agency.return_value = MagicMock(spec=Agency) @@ -195,7 +202,7 @@ async def test_construct_agency_single_layer_chart(agency_manager): async def test_set_client_objects(agency_manager): mock_agency = MagicMock() mock_client = MagicMock() - with patch("nalgonda.services.agency_manager.get_openai_client", return_value=mock_client) as mock_get_client: + with patch("backend.services.agency_manager.get_openai_client", return_value=mock_client) as mock_get_client: agency_manager._set_client_objects(mock_agency) mock_get_client.assert_called_once() assert mock_agency.main_thread.client == mock_client diff --git a/tests/unit/services/test_encryption_service.py b/tests/unit/services/test_encryption_service.py index d27299cc..0fab2fb3 100644 --- a/tests/unit/services/test_encryption_service.py +++ b/tests/unit/services/test_encryption_service.py @@ -1,6 +1,6 @@ from cryptography.fernet import Fernet -from nalgonda.services.encryption_service import EncryptionService +from backend.services.encryption_service import EncryptionService def test_encrypt(): diff --git a/tests/unit/services/test_env_config_manager.py b/tests/unit/services/test_env_config_manager.py index 2d63842a..4b34d0b9 100644 --- a/tests/unit/services/test_env_config_manager.py +++ b/tests/unit/services/test_env_config_manager.py @@ -2,15 +2,15 @@ import pytest -from nalgonda.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage -from nalgonda.services.encryption_service import EncryptionService -from nalgonda.services.env_config_manager import EnvConfigManager -from nalgonda.settings import settings +from backend.repositories.env_config_firestore_storage import EnvConfigFirestoreStorage +from backend.services.encryption_service import EncryptionService +from backend.services.env_config_manager import EnvConfigManager +from backend.settings import settings from tests.test_utils import TEST_USER_ID # Test 1: Successful retrieval of an environment variable -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) def test_get_by_key_success(mock_get, mock_firestore_client): test_value = "gAAAAABl-O4Ls1gPlo6wBQw65vexUSBxL_pD2t8Sm-UjE8vdhDNmvKtrBLVIS5cpYWVvqQFb_6Uu6yKvU2las_5G50DtiKp_Kw==" mock_firestore_client.setup_mock_data("env_configs", TEST_USER_ID, {"TEST_KEY": test_value}) @@ -20,7 +20,7 @@ def test_get_by_key_success(mock_get, mock_firestore_client): # Test 2: Retrieval with non-existing key -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) def test_get_by_key_non_existing(mock_get, mock_firestore_client): mock_firestore_client.setup_mock_data("env_configs", TEST_USER_ID, {"ANOTHER_KEY": "another_value"}) manager = EnvConfigManager(env_config_storage=EnvConfigFirestoreStorage()) @@ -31,7 +31,7 @@ def test_get_by_key_non_existing(mock_get, mock_firestore_client): # Test 3: No environment variables are set for the user -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) def test_get_by_key_no_env_vars_set(mock_get): manager = EnvConfigManager(env_config_storage=EnvConfigFirestoreStorage()) with pytest.raises(ValueError) as exc_info: @@ -41,7 +41,7 @@ def test_get_by_key_no_env_vars_set(mock_get): # Test 4: Retrieval with empty configuration -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) def test_get_by_key_empty_configuration(mock_get, mock_firestore_client): mock_firestore_client.setup_mock_data("env_configs", TEST_USER_ID, {}) manager = EnvConfigManager(env_config_storage=EnvConfigFirestoreStorage()) @@ -52,7 +52,7 @@ def test_get_by_key_empty_configuration(mock_get, mock_firestore_client): # Test 5: Successful setting of an environment variable -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) def test_set_by_key_success(mock_get, mock_firestore_client): new_value = "new_test_value" manager = EnvConfigManager(env_config_storage=EnvConfigFirestoreStorage()) @@ -65,7 +65,7 @@ def test_set_by_key_success(mock_get, mock_firestore_client): # Test 6: Attempt to set a variable when owner_id is missing -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=None) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=None) def test_set_by_key_no_owner_id(mock_get): manager = EnvConfigManager(env_config_storage=EnvConfigFirestoreStorage()) with pytest.raises(ValueError) as exc_info: @@ -75,7 +75,7 @@ def test_set_by_key_no_owner_id(mock_get): # Test 7: Attempt to set a variable when no environment variables are configured for the user -@patch("nalgonda.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) +@patch("backend.services.env_vars_manager.ContextEnvVarsManager.get", return_value=TEST_USER_ID) def test_set_by_key_no_env_vars_configured(mock_get, mock_firestore_client): mock_firestore_client.setup_mock_data("env_configs", TEST_USER_ID, None) # Simulate no existing config manager = EnvConfigManager(env_config_storage=EnvConfigFirestoreStorage()) diff --git a/tests/unit/services/test_env_vars_manager.py b/tests/unit/services/test_env_vars_manager.py index 0e3ad6b2..18c247bc 100644 --- a/tests/unit/services/test_env_vars_manager.py +++ b/tests/unit/services/test_env_vars_manager.py @@ -2,7 +2,7 @@ import pytest -from nalgonda.services.env_vars_manager import ContextEnvVarsManager +from backend.services.env_vars_manager import ContextEnvVarsManager from tests.test_utils import TEST_USER_ID diff --git a/tests/unit/services/test_oai_client.py b/tests/unit/services/test_oai_client.py index 3b4b5cbd..3caf0a2d 100644 --- a/tests/unit/services/test_oai_client.py +++ b/tests/unit/services/test_oai_client.py @@ -10,19 +10,19 @@ def mock_env_config_firestore_storage(): @pytest.fixture def mock_env_config_manager(recover_oai_client): # noqa: ARG001 - with patch("nalgonda.services.oai_client.EnvConfigManager") as mock: + with patch("backend.services.oai_client.EnvConfigManager") as mock: yield mock @pytest.fixture def mock_openai_client(recover_oai_client): # noqa: ARG001 - with patch("nalgonda.services.oai_client.openai.OpenAI") as mock: + with patch("backend.services.oai_client.openai.OpenAI") as mock: yield mock @pytest.fixture def mock_instructor_patch(recover_oai_client): # noqa: ARG001 - with patch("nalgonda.services.oai_client.instructor.patch") as mock: + with patch("backend.services.oai_client.instructor.patch") as mock: mock.return_value = MagicMock(name="OpenAI_Client_Patched") yield mock @@ -31,7 +31,7 @@ def test_get_openai_client_uses_correct_api_key( mock_env_config_manager, mock_openai_client, mock_env_config_firestore_storage, mock_instructor_patch ): # Setup - from nalgonda.services.oai_client import get_openai_client + from backend.services.oai_client import get_openai_client expected_api_key = "test_api_key" mock_env_config_manager.return_value.get_by_key.return_value = expected_api_key diff --git a/tests/unit/services/test_remove_client_objects.py b/tests/unit/services/test_remove_client_objects.py index a48df22f..56eaa1fa 100644 --- a/tests/unit/services/test_remove_client_objects.py +++ b/tests/unit/services/test_remove_client_objects.py @@ -5,7 +5,7 @@ from agency_swarm import Agency, Agent from agency_swarm.threads import Thread -from nalgonda.services.agency_manager import AgencyManager +from backend.services.agency_manager import AgencyManager @pytest.fixture diff --git a/tests/unit/services/test_session_manager.py b/tests/unit/services/test_session_manager.py index 5d47be62..2a00a761 100644 --- a/tests/unit/services/test_session_manager.py +++ b/tests/unit/services/test_session_manager.py @@ -3,8 +3,8 @@ import pytest -from nalgonda.models.session_config import SessionConfig -from nalgonda.services.session_manager import SessionManager +from backend.models.session_config import SessionConfig +from backend.services.session_manager import SessionManager # Fixtures @@ -59,7 +59,7 @@ def test_create_session(agency_mock, session_manager, session_storage_mock): # Mock _create_thread to return a mock object with an id attribute session_manager._create_thread = MagicMock(return_value=MagicMock(id="main_thread_id")) - with patch("nalgonda.services.session_manager.datetime") as mock_datetime: + with patch("backend.services.session_manager.datetime") as mock_datetime: mock_datetime.utcnow.return_value = datetime(2021, 1, 1, tzinfo=UTC) session_id = session_manager.create_session(agency_mock, "agency_id", "owner_id") @@ -73,7 +73,7 @@ def test_create_session(agency_mock, session_manager, session_storage_mock): session_storage_mock.save.assert_called_once_with(expected_session_config) -@patch("nalgonda.services.session_manager.get_openai_client") +@patch("backend.services.session_manager.get_openai_client") def test_create_threads(mock_get_openai_client, session_manager, agency_mock): mock_client = MagicMock() mock_get_openai_client.return_value = mock_client @@ -105,7 +105,7 @@ def test_init_threads(session_manager, agency_mock, agent_mock, recipient_agent_ mock_create_thread.assert_has_calls(expected_calls, any_order=True) -@patch("nalgonda.services.session_manager.Thread") +@patch("backend.services.session_manager.Thread") def test_create_thread(mock_thread_class, session_manager, agent_mock, recipient_agent_mock): client_mock = MagicMock() mock_thread_instance = create_mock_thread(agent_mock, recipient_agent_mock) diff --git a/tests/unit/services/test_skill_service.py b/tests/unit/services/test_skill_service.py index 323535c3..780bd908 100644 --- a/tests/unit/services/test_skill_service.py +++ b/tests/unit/services/test_skill_service.py @@ -2,12 +2,12 @@ import pytest -from nalgonda.services.skill_service import SkillService, generate_skill_description +from backend.services.skill_service import SkillService, generate_skill_description def test_generate_skill_description(): with patch( - "nalgonda.services.skill_service.get_chat_completion", return_value="Summary of the skill" + "backend.services.skill_service.get_chat_completion", return_value="Summary of the skill" ) as mock_get_chat: code = "def example(): pass" result = generate_skill_description(code) @@ -27,7 +27,7 @@ def test_generate_skill_description(): def test_get_skill_class_found(): skill_name = "SummarizeCode" - with patch("nalgonda.services.skill_service.custom_skills.SummarizeCode", new_callable=MagicMock) as mock_skill: + with patch("backend.services.skill_service.custom_skills.SummarizeCode", new_callable=MagicMock) as mock_skill: service = SkillService() result = service._get_skill_class(skill_name) assert result == mock_skill, "The function did not return the correct skill class" @@ -44,7 +44,7 @@ def test_get_skill_class_not_found(): def test_get_skill_arguments(): - with patch("nalgonda.services.skill_service.get_chat_completion", return_value='{"arg": "value"}') as mock_get_chat: + with patch("backend.services.skill_service.get_chat_completion", return_value='{"arg": "value"}') as mock_get_chat: service = SkillService() result = service._get_skill_arguments("function_spec", "user_prompt") expected_args_str = '{"arg": "value"}' @@ -58,7 +58,7 @@ def test_execute_skill_success(): skill_instance_mock.run.return_value = "Skill output" args = '{"arg":"value"}' - with patch("nalgonda.services.skill_service.SkillService._get_skill_class", return_value=skill_class_mock): + with patch("backend.services.skill_service.SkillService._get_skill_class", return_value=skill_class_mock): service = SkillService() result = service._execute_skill(skill_class_mock, args) assert ( @@ -72,7 +72,7 @@ def test_execute_skill_failure(): skill_instance_mock.run.side_effect = Exception("Error running skill") args = '{"arg":"value"}' - with patch("nalgonda.services.skill_service.SkillService._get_skill_class", return_value=skill_class_mock): + with patch("backend.services.skill_service.SkillService._get_skill_class", return_value=skill_class_mock): service = SkillService() result = service._execute_skill(skill_class_mock, args) assert ( diff --git a/tests/unit/utils/test_json_formatter.py b/tests/unit/utils/test_json_formatter.py index 93623e03..5d09d020 100644 --- a/tests/unit/utils/test_json_formatter.py +++ b/tests/unit/utils/test_json_formatter.py @@ -4,7 +4,7 @@ import pytest -from nalgonda.utils.logging_utils.json_formatter import JSONFormatter +from backend.utils.logging_utils.json_formatter import JSONFormatter @pytest.fixture diff --git a/tests/unit/utils/test_utils.py b/tests/unit/utils/test_utils.py index f24cface..15dd6164 100644 --- a/tests/unit/utils/test_utils.py +++ b/tests/unit/utils/test_utils.py @@ -1,6 +1,6 @@ from unittest.mock import MagicMock, patch -from nalgonda.utils import ( +from backend.utils import ( chunk_input_with_token_limit, get_chat_completion, get_token_count, @@ -14,35 +14,35 @@ def test_get_chat_completion(): mock_completion.choices = [MagicMock()] mock_completion.choices[0].message.content = "test response" - with patch("nalgonda.utils.get_openai_client") as mock_client: + with patch("backend.utils.get_openai_client") as mock_client: mock_client.return_value.chat.completions.create.return_value = mock_completion response = get_chat_completion("system message", "user prompt", "text-davinci-003") assert response == "test response" -@patch("nalgonda.utils.tiktoken.get_encoding") +@patch("backend.utils.tiktoken.get_encoding") def test_tokenize(mock_get_encoding): mock_get_encoding.return_value.encode.return_value = [1, 2, 3] tokens = tokenize("sample text") assert tokens == [1, 2, 3] -@patch("nalgonda.utils.tokenize") +@patch("backend.utils.tokenize") def test_get_token_count(mock_tokenize): mock_tokenize.return_value = [1, 2, 3] count = get_token_count("sample text") assert count == 3 -@patch("nalgonda.utils.get_token_count") +@patch("backend.utils.get_token_count") def test_chunk_input_with_token_limit_within_limit(mock_get_token_count): mock_get_token_count.side_effect = lambda text: len(text) # Simplified token count chunks = chunk_input_with_token_limit("This is a test.", 10, " ") assert chunks == ["This is a ", "test. "] -@patch("nalgonda.utils.tokenize") -@patch("nalgonda.utils.tiktoken.get_encoding") +@patch("backend.utils.tokenize") +@patch("backend.utils.tiktoken.get_encoding") def test_truncate_oversized_chunk(mock_get_encoding, mock_tokenize): mock_tokenize.side_effect = lambda text: list(range(len(text))) # Fake tokens mock_get_encoding.return_value.decode.return_value = "truncated"