Skip to content

Commit

Permalink
[Feature] suppress logging unless init is called
Browse files Browse the repository at this point in the history
  • Loading branch information
siyangqiu committed Apr 20, 2024
1 parent afb6c03 commit 015c645
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 35 deletions.
5 changes: 3 additions & 2 deletions agentops/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from .enums import Models
from .decorators import record_function
from .agent import track_agent
from .log_config import set_logging_level_info, set_logging_level_critial


def init(api_key: Optional[str] = None,
Expand Down Expand Up @@ -41,7 +42,7 @@ def init(api_key: Optional[str] = None,
inherited_session_id (optional, str): Init Agentops with an existing Session
Attributes:
"""

set_logging_level_info()
c = Client(api_key=api_key,
parent_key=parent_key,
endpoint=endpoint,
Expand All @@ -52,7 +53,7 @@ def init(api_key: Optional[str] = None,
auto_start_session=auto_start_session,
inherited_session_id=inherited_session_id
)

return inherited_session_id or c.current_session_id


Expand Down
4 changes: 2 additions & 2 deletions agentops/agent.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import logging
from .log_config import logger
from uuid import uuid4
from agentops import Client
from inspect import isclass, isfunction
Expand All @@ -18,7 +18,7 @@ def new_init(self, *args, **kwargs):
self.agent_ops_agent_id = uuid4()
Client().create_agent(self.agent_ops_agent_id, self.agent_ops_agent_name)
except AttributeError as e:
logging.error("AgentOps failed to track an agent. This often happens if agentops.init() was not "
logger.warning("AgentOps failed to track an agent. This often happens if agentops.init() was not "
"called before initializing an agent with the @track_agent decorator.")
raise e

Expand Down
20 changes: 11 additions & 9 deletions agentops/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from uuid import uuid4
from typing import Optional, List
import traceback
import logging
from .log_config import logger, set_logging_level_info
import inspect
import atexit
import signal
Expand Down Expand Up @@ -115,7 +115,7 @@ def record(self, event: Event | ErrorEvent):
if self._session is not None and not self._session.has_ended:
self._worker.add_event(event.__dict__)
else:
logging.warning(
logger.warning(
"🖇 AgentOps: Cannot record event - no current session")

def _record_event_sync(self, func, event_name, *args, **kwargs):
Expand Down Expand Up @@ -206,20 +206,22 @@ def start_session(self, tags: Optional[List[str]] = None, config: Optional[Confi
config: (Configuration, optional): Client configuration object
inherited_session_id (optional, str): assign session id to match existing Session
"""
set_logging_level_info()

if self._session is not None:
return logging.warning("🖇 AgentOps: Cannot start session - session already started")
return logger.warning("🖇 AgentOps: Cannot start session - session already started")

if not config and not self.config:
return logging.warning("🖇 AgentOps: Cannot start session - missing configuration")
return logger.warning("🖇 AgentOps: Cannot start session - missing configuration")

self._session = Session(inherited_session_id or uuid4(), tags or self._tags, host_env=get_host_env())
self._worker = Worker(config or self.config)
start_session_result = self._worker.start_session(self._session)
if not start_session_result:
self._session = None
return logging.warning("🖇 AgentOps: Cannot start session")
return logger.warning("🖇 AgentOps: Cannot start session")

logging.info('View info on this session at https://app.agentops.ai/drilldown?session_id={}'
logger.info('View info on this session at https://app.agentops.ai/drilldown?session_id={}'
.format(self._session.session_id))

return self._session.session_id
Expand All @@ -237,10 +239,10 @@ def end_session(self,
video (str, optional): The video screen recording of the session
"""
if self._session is None or self._session.has_ended:
return logging.warning("🖇 AgentOps: Cannot end session - no current session")
return logger.warning("🖇 AgentOps: Cannot end session - no current session")

if not any(end_state == state.value for state in EndState):
return logging.warning("🖇 AgentOps: Invalid end_state. Please use one of the EndState enums")
return logger.warning("🖇 AgentOps: Invalid end_state. Please use one of the EndState enums")

self._session.video = video
self._session.end_session(end_state, end_state_reason)
Expand Down Expand Up @@ -272,7 +274,7 @@ def signal_handler(signum, frame):
frame: The current stack frame.
"""
signal_name = 'SIGINT' if signum == signal.SIGINT else 'SIGTERM'
logging.info(
logger.info(
f'🖇 AgentOps: {signal_name} detected. Ending session...')
self.end_session(end_state='Fail',
end_state_reason=f'Signal {signal_name} detected')
Expand Down
4 changes: 2 additions & 2 deletions agentops/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from typing import Optional
from os import environ
import logging
from .log_config import logger


class Configuration:
Expand Down Expand Up @@ -143,4 +143,4 @@ class ConfigurationError(Exception):

def __init__(self, message: str):
super().__init__(message)
logging.warning(message)
logger.warning(message)
6 changes: 3 additions & 3 deletions agentops/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from datetime import datetime
import json
import inspect
import logging
from .log_config import logger
from uuid import UUID
import os
from importlib.metadata import version
Expand Down Expand Up @@ -85,7 +85,7 @@ def check_call_stack_for_agent_id() -> str | None:
if var == "__main__":
return
if hasattr(var, 'agent_ops_agent_id') and getattr(var, 'agent_ops_agent_id'):
logging.debug('LLM call from agent named: ' + getattr(var, 'agent_ops_agent_name'))
logger.debug('LLM call from agent named: ' + getattr(var, 'agent_ops_agent_name'))
return getattr(var, 'agent_ops_agent_id')
return None

Expand All @@ -95,7 +95,7 @@ def get_agentops_version():
pkg_version = version("agentops")
return pkg_version
except Exception as e:
logging.warning(f"Error reading package version: {e}")
logger.warning(f"Error reading package version: {e}")
return None


Expand Down
10 changes: 5 additions & 5 deletions agentops/http_client.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from enum import Enum
from typing import Optional
import logging
from .log_config import logger
import requests
from requests.adapters import Retry, HTTPAdapter

Expand Down Expand Up @@ -82,7 +82,7 @@ def post(url: str, payload: bytes, api_key: Optional[str] = None, parent_key: Op
except requests.exceptions.Timeout:
result.code = 408
result.status = HttpStatus.TIMEOUT
logging.warning(
logger.warning(
'🖇 AgentOps: Could not post data - connection timed out')
except requests.exceptions.HTTPError as e:
try:
Expand All @@ -96,12 +96,12 @@ def post(url: str, payload: bytes, api_key: Optional[str] = None, parent_key: Op
result.body = {'error': str(e)}

if result.code == 401:
logging.warning(
logger.warning(
f'🖇 AgentOps: Could not post data - API server rejected your API key: {api_key}')
if result.code == 400:
logging.warning(f'🖇 AgentOps: Could not post data - {result.body}')
logger.warning(f'🖇 AgentOps: Could not post data - {result.body}')
if result.code == 500:
logging.warning(
logger.warning(
f'🖇 AgentOps: Could not post data - internal server error')

return result
18 changes: 9 additions & 9 deletions agentops/llm_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import sys
from importlib import import_module
from packaging.version import parse
import logging
from .log_config import logger
from .event import LLMEvent, ErrorEvent
from .helpers import get_ISO_time, check_call_stack_for_agent_id
import inspect
Expand Down Expand Up @@ -59,8 +59,8 @@ def handle_stream_chunk(chunk):
self.client.record(self.llm_event)
except Exception as e:
self.client.record(ErrorEvent(trigger_event=self.llm_event, exception=e))
# TODO: This error is specific to only one path of failure. Should be more generic or have different logging for different paths
logging.warning(
# TODO: This error is specific to only one path of failure. Should be more generic or have different logger for different paths
logger.warning(
f"🖇 AgentOps: Unable to parse a chunk for LLM call {kwargs} - skipping upload to AgentOps")

# if the response is a generator, decorate the generator
Expand Down Expand Up @@ -98,8 +98,8 @@ def generator():
self.client.record(self.llm_event)
except Exception as e:
self.client.record(ErrorEvent(trigger_event=self.llm_event, exception=e))
# TODO: This error is specific to only one path of failure. Should be more generic or have different logging for different paths
logging.warning(
# TODO: This error is specific to only one path of failure. Should be more generic or have different logger for different paths
logger.warning(
f"🖇 AgentOps: Unable to parse a chunk for LLM call {kwargs} - skipping upload to AgentOps")

return response
Expand Down Expand Up @@ -144,8 +144,8 @@ def handle_stream_chunk(chunk: ChatCompletionChunk):
self.client.record(self.llm_event)
except Exception as e:
self.client.record(ErrorEvent(trigger_event=self.llm_event, exception=e))
# TODO: This error is specific to only one path of failure. Should be more generic or have different logging for different paths
logging.warning(
# TODO: This error is specific to only one path of failure. Should be more generic or have different logger for different paths
logger.warning(
f"🖇 AgentOps: Unable to parse a chunk for LLM call {kwargs} - skipping upload to AgentOps")

# if the response is a generator, decorate the generator
Expand Down Expand Up @@ -189,8 +189,8 @@ async def async_generator():
self.client.record(self.llm_event)
except Exception as e:
self.client.record(ErrorEvent(trigger_event=self.llm_event, exception=e))
# TODO: This error is specific to only one path of failure. Should be more generic or have different logging for different paths
logging.warning(
# TODO: This error is specific to only one path of failure. Should be more generic or have different logger for different paths
logger.warning(
f"🖇 AgentOps: Unable to parse a chunk for LLM call {kwargs} - skipping upload to AgentOps")

return response
Expand Down
10 changes: 10 additions & 0 deletions agentops/log_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import logging

logger = logging.getLogger("agentops")
logger.setLevel(logging.CRITICAL)

def set_logging_level_critial():
logger.setLevel(logging.CRITICAL)

def set_logging_level_info():
logger.setLevel(logging.INFO)
4 changes: 2 additions & 2 deletions agentops/meta_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import logging
from .log_config import logger
import traceback

from .host_env import get_host_env
Expand Down Expand Up @@ -45,7 +45,7 @@ def wrapper(self, *args, **kwargs):
try:
return method(self, *args, **kwargs)
except Exception as e:
logging.warning(f"🖇 AgentOps: Error: {e}")
logger.warning(f"🖇 AgentOps: Error: {e}")
config = getattr(self, 'config', None)
if config is not None:
type(self).send_exception_to_server(e, self.config._api_key)
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "agentops"
version = "0.1.5"
version = "0.1.6"
authors = [
{ name="Alex Reibman", email="[email protected]" },
{ name="Shawn Qiu", email="[email protected]" },
Expand Down

0 comments on commit 015c645

Please sign in to comment.