mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 00:28:31 +00:00
* initial setup * feat: enhance CrewKickoffCompletedEvent to include total token usage - Added total_tokens attribute to CrewKickoffCompletedEvent for better tracking of token usage during crew execution. - Updated Crew class to emit total token usage upon kickoff completion. - Removed obsolete context handler and execution context tracker files to streamline event handling. * cleanup * remove print statements for loggers * feat: add CrewAI base URL and improve logging in tracing - Introduced `CREWAI_BASE_URL` constant for easy access to the CrewAI application URL. - Replaced print statements with logging in the `TraceSender` class for better error tracking. - Enhanced the `TraceBatchManager` to provide default values for flow names and removed unnecessary comments. - Implemented singleton pattern in `TraceCollectionListener` to ensure a single instance is used. - Added a new test case to verify that the trace listener correctly collects events during crew execution. * clear * fix: update datetime serialization in tracing interfaces - Removed the 'Z' suffix from datetime serialization in TraceSender and TraceEvent to ensure consistent ISO format. - Added new test cases to validate the functionality of the TraceBatchManager and event collection during crew execution. - Introduced fixtures to clear event bus listeners before each test to maintain isolation. * test: enhance tracing tests with mock authentication token - Added a mock authentication token to the tracing tests to ensure proper setup and event collection. - Updated test methods to include the mock token, improving isolation and reliability of tests related to the TraceListener and BatchManager. - Ensured that the tests validate the correct behavior of event collection during crew execution. * test: refactor tracing tests to improve mock usage - Moved the mock authentication token patching inside the test class to enhance readability and maintainability. - Updated test methods to remove unnecessary mock parameters, streamlining the test signatures. - Ensured that the tests continue to validate the correct behavior of event collection during crew execution while improving isolation. * test: refactor tracing tests for improved mock usage and consistency - Moved mock authentication token patching into individual test methods for better clarity and maintainability. - Corrected the backstory string in the `Agent` instantiation to fix a typo. - Ensured that all tests validate the correct behavior of event collection during crew execution while enhancing isolation and readability. * test: add new tracing test for disabled trace listener - Introduced a new test case to verify that the trace listener does not make HTTP calls when tracing is disabled via environment variables. - Enhanced existing tests by mocking PlusAPI HTTP calls to avoid authentication and network requests, improving test isolation and reliability. - Updated the test setup to ensure proper initialization of the trace listener and its components during crew execution. * refactor: update LLM class to utilize new completion function and improve cost calculation - Replaced direct calls to `litellm.completion` with a new import for better clarity and maintainability. - Introduced a new optional attribute `completion_cost` in the LLM class to track the cost of completions. - Updated the handling of completion responses to ensure accurate cost calculations and improved error handling. - Removed outdated test cassettes for gemini models to streamline test suite and avoid redundancy. - Enhanced existing tests to reflect changes in the LLM class and ensure proper functionality. * test: enhance tracing tests with additional request and response scenarios - Added new test cases to validate the behavior of the trace listener and batch manager when handling 404 responses from the tracing API. - Updated existing test cassettes to include detailed request and response structures, ensuring comprehensive coverage of edge cases. - Improved mock setup to avoid unnecessary network calls and enhance test reliability. - Ensured that the tests validate the correct behavior of event collection during crew execution, particularly in scenarios where the tracing service is unavailable. * feat: enable conditional tracing based on environment variable - Added support for enabling or disabling the trace listener based on the `CREWAI_TRACING_ENABLED` environment variable. - Updated the `Crew` class to conditionally set up the trace listener only when tracing is enabled, improving performance and resource management. - Refactored test cases to ensure proper cleanup of event bus listeners before and after each test, enhancing test reliability and isolation. - Improved mock setup in tracing tests to validate the behavior of the trace listener when tracing is disabled. * fix: downgrade litellm version from 1.74.9 to 1.74.3 - Updated the `pyproject.toml` and `uv.lock` files to reflect the change in the `litellm` dependency version. - This downgrade addresses compatibility issues and ensures stability in the project environment. * refactor: improve tracing test setup by moving mock authentication token patching - Removed the module-level patch for the authentication token and implemented a fixture to mock the token for all tests in the class, enhancing test isolation and readability. - Updated the event bus clearing logic to ensure original handlers are restored after tests, improving reliability of the test environment. - This refactor streamlines the test setup and ensures consistent behavior across tracing tests. * test: enhance tracing test setup with comprehensive mock authentication - Expanded the mock authentication token patching to cover all instances where `get_auth_token` is used across different modules, ensuring consistent behavior in tests. - Introduced a new fixture to reset tracing singleton instances between tests, improving test isolation and reliability. - This update enhances the overall robustness of the tracing tests by ensuring that all necessary components are properly mocked and reset, leading to more reliable test outcomes. * just drop the test for now * refactor: comment out completion-related code in LLM and LLM event classes - Commented out the `completion` and `completion_cost` imports and their usage in the `LLM` class to prevent potential issues during execution. - Updated the `LLMCallCompletedEvent` class to comment out the `response_cost` attribute, ensuring consistency with the changes in the LLM class. - This refactor aims to streamline the code and prepare for future updates without affecting current functionality. * refactor: update LLM response handling in LiteAgent - Commented out the `response_cost` attribute in the LLM response handling to align with recent refactoring in the LLM class. - This change aims to maintain consistency in the codebase and prepare for future updates without affecting current functionality. * refactor: remove commented-out response cost attributes in LLM and LiteAgent - Commented out the `response_cost` attribute in both the `LiteAgent` and `LLM` classes to maintain consistency with recent refactoring efforts. - This change aligns with previous updates aimed at streamlining the codebase and preparing for future enhancements without impacting current functionality. * bring back litellm upgrade version
140 lines
4.9 KiB
Python
140 lines
4.9 KiB
Python
from typing import List, Optional
|
|
from urllib.parse import urljoin
|
|
|
|
import requests
|
|
|
|
from crewai.cli.config import Settings
|
|
from crewai.cli.version import get_crewai_version
|
|
from crewai.cli.constants import DEFAULT_CREWAI_ENTERPRISE_URL
|
|
|
|
|
|
class PlusAPI:
|
|
"""
|
|
This class exposes methods for working with the CrewAI+ API.
|
|
"""
|
|
|
|
TOOLS_RESOURCE = "/crewai_plus/api/v1/tools"
|
|
ORGANIZATIONS_RESOURCE = "/crewai_plus/api/v1/me/organizations"
|
|
CREWS_RESOURCE = "/crewai_plus/api/v1/crews"
|
|
AGENTS_RESOURCE = "/crewai_plus/api/v1/agents"
|
|
TRACING_RESOURCE = "/crewai_plus/api/v1/tracing"
|
|
|
|
def __init__(self, api_key: str) -> None:
|
|
self.api_key = api_key
|
|
self.headers = {
|
|
"Authorization": f"Bearer {api_key}",
|
|
"Content-Type": "application/json",
|
|
"User-Agent": f"CrewAI-CLI/{get_crewai_version()}",
|
|
"X-Crewai-Version": get_crewai_version(),
|
|
}
|
|
settings = Settings()
|
|
if settings.org_uuid:
|
|
self.headers["X-Crewai-Organization-Id"] = settings.org_uuid
|
|
|
|
self.base_url = (
|
|
str(settings.enterprise_base_url) or DEFAULT_CREWAI_ENTERPRISE_URL
|
|
)
|
|
|
|
def _make_request(self, method: str, endpoint: str, **kwargs) -> requests.Response:
|
|
url = urljoin(self.base_url, endpoint)
|
|
session = requests.Session()
|
|
session.trust_env = False
|
|
return session.request(method, url, headers=self.headers, **kwargs)
|
|
|
|
def login_to_tool_repository(self):
|
|
return self._make_request("POST", f"{self.TOOLS_RESOURCE}/login")
|
|
|
|
def get_tool(self, handle: str):
|
|
return self._make_request("GET", f"{self.TOOLS_RESOURCE}/{handle}")
|
|
|
|
def get_agent(self, handle: str):
|
|
return self._make_request("GET", f"{self.AGENTS_RESOURCE}/{handle}")
|
|
|
|
def publish_tool(
|
|
self,
|
|
handle: str,
|
|
is_public: bool,
|
|
version: str,
|
|
description: Optional[str],
|
|
encoded_file: str,
|
|
available_exports: Optional[List[str]] = None,
|
|
):
|
|
params = {
|
|
"handle": handle,
|
|
"public": is_public,
|
|
"version": version,
|
|
"file": encoded_file,
|
|
"description": description,
|
|
"available_exports": available_exports,
|
|
}
|
|
return self._make_request("POST", f"{self.TOOLS_RESOURCE}", json=params)
|
|
|
|
def deploy_by_name(self, project_name: str) -> requests.Response:
|
|
return self._make_request(
|
|
"POST", f"{self.CREWS_RESOURCE}/by-name/{project_name}/deploy"
|
|
)
|
|
|
|
def deploy_by_uuid(self, uuid: str) -> requests.Response:
|
|
return self._make_request("POST", f"{self.CREWS_RESOURCE}/{uuid}/deploy")
|
|
|
|
def crew_status_by_name(self, project_name: str) -> requests.Response:
|
|
return self._make_request(
|
|
"GET", f"{self.CREWS_RESOURCE}/by-name/{project_name}/status"
|
|
)
|
|
|
|
def crew_status_by_uuid(self, uuid: str) -> requests.Response:
|
|
return self._make_request("GET", f"{self.CREWS_RESOURCE}/{uuid}/status")
|
|
|
|
def crew_by_name(
|
|
self, project_name: str, log_type: str = "deployment"
|
|
) -> requests.Response:
|
|
return self._make_request(
|
|
"GET", f"{self.CREWS_RESOURCE}/by-name/{project_name}/logs/{log_type}"
|
|
)
|
|
|
|
def crew_by_uuid(
|
|
self, uuid: str, log_type: str = "deployment"
|
|
) -> requests.Response:
|
|
return self._make_request(
|
|
"GET", f"{self.CREWS_RESOURCE}/{uuid}/logs/{log_type}"
|
|
)
|
|
|
|
def delete_crew_by_name(self, project_name: str) -> requests.Response:
|
|
return self._make_request(
|
|
"DELETE", f"{self.CREWS_RESOURCE}/by-name/{project_name}"
|
|
)
|
|
|
|
def delete_crew_by_uuid(self, uuid: str) -> requests.Response:
|
|
return self._make_request("DELETE", f"{self.CREWS_RESOURCE}/{uuid}")
|
|
|
|
def list_crews(self) -> requests.Response:
|
|
return self._make_request("GET", self.CREWS_RESOURCE)
|
|
|
|
def create_crew(self, payload) -> requests.Response:
|
|
return self._make_request("POST", self.CREWS_RESOURCE, json=payload)
|
|
|
|
def get_organizations(self) -> requests.Response:
|
|
return self._make_request("GET", self.ORGANIZATIONS_RESOURCE)
|
|
|
|
def send_trace_batch(self, payload) -> requests.Response:
|
|
return self._make_request("POST", self.TRACING_RESOURCE, json=payload)
|
|
|
|
def initialize_trace_batch(self, payload) -> requests.Response:
|
|
return self._make_request(
|
|
"POST", f"{self.TRACING_RESOURCE}/batches", json=payload
|
|
)
|
|
|
|
def send_trace_events(self, trace_batch_id: str, payload) -> requests.Response:
|
|
return self._make_request(
|
|
"POST",
|
|
f"{self.TRACING_RESOURCE}/batches/{trace_batch_id}/events",
|
|
json=payload,
|
|
)
|
|
|
|
def finalize_trace_batch(self, trace_batch_id: str, payload) -> requests.Response:
|
|
return self._make_request(
|
|
"PATCH",
|
|
f"{self.TRACING_RESOURCE}/batches/{trace_batch_id}/finalize",
|
|
json=payload,
|
|
)
|