openhands-sdk 1.4.0__tar.gz → 1.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/PKG-INFO +1 -1
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/conversation_stats.py +38 -1
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/conversation_state.py +8 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/logger/logger.py +7 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands_sdk.egg-info/PKG-INFO +1 -1
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/pyproject.toml +1 -1
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/agent.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/in_context_learning_example.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/in_context_learning_example_suffix.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/security_policy.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/security_risk_assessment.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/system_prompt.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/system_prompt_interactive.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/system_prompt_long_horizon.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/system_prompt_planning.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/system_prompt_tech_philosophy.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/utils.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/agent_context.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/llm_summarizing_condenser.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/no_op_condenser.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/pipeline_condenser.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/prompts/summarizing_prompt.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/prompts/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/prompts/prompt.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/prompts/templates/ask_agent_template.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/prompts/templates/skill_knowledge_info.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/prompts/templates/system_message_suffix.j2 +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/skills/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/skills/exceptions.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/skills/skill.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/skills/trigger.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/skills/types.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/view.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/conversation.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/event_store.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/events_list_base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/exceptions.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/fifo_lock.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/impl/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/impl/local_conversation.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/impl/remote_conversation.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/persistence_const.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/response_utils.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/secret_registry.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/secret_source.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/serialization_diff.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/state.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/stuck_detector.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/title_utils.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/types.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/visualizer/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/visualizer/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/visualizer/default.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/critic/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/critic/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/critic/impl/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/critic/impl/agent_finished.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/critic/impl/empty_patch.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/critic/impl/pass_critic.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/condenser.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/conversation_error.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/llm_completion_log.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/llm_convertible/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/llm_convertible/action.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/llm_convertible/message.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/llm_convertible/observation.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/llm_convertible/system.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/token.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/types.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/user_action.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/git/exceptions.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/git/git_changes.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/git/git_diff.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/git/models.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/git/utils.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/io/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/io/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/io/local.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/io/memory.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/exceptions/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/exceptions/classifier.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/exceptions/mapping.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/exceptions/types.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/llm.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/llm_registry.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/llm_response.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/message.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/mixins/fn_call_converter.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/mixins/non_native_fc.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/options/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/options/chat_options.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/options/common.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/options/responses_options.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/router/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/router/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/router/impl/multimodal.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/router/impl/random.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/streaming.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/utils/metrics.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/utils/model_features.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/utils/model_info.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/utils/retry_mixin.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/utils/telemetry.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/utils/unverified_models.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/llm/utils/verified_models.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/logger/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/logger/rolling.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/mcp/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/mcp/client.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/mcp/definition.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/mcp/exceptions.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/mcp/tool.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/mcp/utils.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/observability/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/observability/laminar.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/observability/utils.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/py.typed +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/security/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/security/analyzer.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/security/confirmation_policy.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/security/llm_analyzer.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/security/risk.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/builtins/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/builtins/finish.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/builtins/think.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/registry.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/schema.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/spec.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/tool/tool.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/async_executor.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/async_utils.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/cipher.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/command.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/deprecation.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/github.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/json.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/models.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/pydantic_diff.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/pydantic_secrets.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/truncate.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/utils/visualize.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/local.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/models.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/remote/__init__.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/remote/async_remote_workspace.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/remote/base.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/remote/remote_workspace_mixin.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/workspace.py +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands_sdk.egg-info/SOURCES.txt +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands_sdk.egg-info/dependency_links.txt +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands_sdk.egg-info/requires.txt +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands_sdk.egg-info/top_level.txt +0 -0
- {openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/setup.cfg +0 -0
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/conversation_stats.py
RENAMED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
from
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field, PrivateAttr, model_serializer
|
|
2
4
|
|
|
3
5
|
from openhands.sdk.llm.llm_registry import RegistryEvent
|
|
4
6
|
from openhands.sdk.llm.utils.metrics import Metrics
|
|
@@ -18,6 +20,41 @@ class ConversationStats(BaseModel):
|
|
|
18
20
|
|
|
19
21
|
_restored_usage_ids: set[str] = PrivateAttr(default_factory=set)
|
|
20
22
|
|
|
23
|
+
@model_serializer(mode="wrap")
|
|
24
|
+
def _serialize_with_context(self, serializer: Any, info: Any) -> dict[str, Any]:
|
|
25
|
+
"""Serialize metrics based on context.
|
|
26
|
+
|
|
27
|
+
By default, preserves full metrics history including costs,
|
|
28
|
+
response_latencies, and token_usages lists for persistence.
|
|
29
|
+
|
|
30
|
+
When context={'use_snapshot': True} is passed, converts Metrics to
|
|
31
|
+
MetricsSnapshot format to minimize payload size for network transmission.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
serializer: Pydantic's default serializer
|
|
35
|
+
info: Serialization info containing context
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
Dictionary with metrics serialized based on context
|
|
39
|
+
"""
|
|
40
|
+
# Get the default serialization
|
|
41
|
+
data = serializer(self)
|
|
42
|
+
|
|
43
|
+
# Check if we should use snapshot serialization
|
|
44
|
+
context = info.context if info else None
|
|
45
|
+
use_snapshot = context.get("use_snapshot", False) if context else False
|
|
46
|
+
|
|
47
|
+
if use_snapshot and "usage_to_metrics" in data:
|
|
48
|
+
# Replace each Metrics with its snapshot
|
|
49
|
+
usage_to_snapshots = {}
|
|
50
|
+
for usage_id, metrics in self.usage_to_metrics.items():
|
|
51
|
+
snapshot = metrics.get_snapshot()
|
|
52
|
+
usage_to_snapshots[usage_id] = snapshot.model_dump()
|
|
53
|
+
|
|
54
|
+
data["usage_to_metrics"] = usage_to_snapshots
|
|
55
|
+
|
|
56
|
+
return data
|
|
57
|
+
|
|
21
58
|
def get_combined_metrics(self) -> Metrics:
|
|
22
59
|
total_metrics = Metrics()
|
|
23
60
|
for metrics in self.usage_to_metrics.values():
|
|
@@ -49,6 +49,14 @@ class ConversationStateUpdateEvent(Event):
|
|
|
49
49
|
|
|
50
50
|
@field_validator("value")
|
|
51
51
|
def validate_value(cls, value, info):
|
|
52
|
+
# Prevent circular import
|
|
53
|
+
from openhands.sdk.conversation.conversation_stats import ConversationStats
|
|
54
|
+
|
|
55
|
+
# For ConversationStats, use snapshot serialization to avoid
|
|
56
|
+
# sending lengthy lists over WebSocket
|
|
57
|
+
if isinstance(value, ConversationStats):
|
|
58
|
+
return value.model_dump(mode="json", context={"use_snapshot": True})
|
|
59
|
+
|
|
52
60
|
key = info.data.get("key")
|
|
53
61
|
if key is None:
|
|
54
62
|
# Allow value without key for flexibility
|
|
@@ -105,7 +105,14 @@ def setup_logging(
|
|
|
105
105
|
keep = ENV_BACKUP_COUNT if backup_count is None else backup_count
|
|
106
106
|
|
|
107
107
|
root = logging.getLogger()
|
|
108
|
+
old_level = root.level
|
|
108
109
|
root.setLevel(lvl)
|
|
110
|
+
|
|
111
|
+
# Set the level for any existing logger with the same intial level
|
|
112
|
+
for logger in logging.root.manager.loggerDict.values():
|
|
113
|
+
if isinstance(logger, logging.Logger) and logger.level == old_level:
|
|
114
|
+
logger.setLevel(lvl)
|
|
115
|
+
|
|
109
116
|
# Do NOT clear existing handlers; Uvicorn installs these before importing the app.
|
|
110
117
|
# Only add ours if there isn't already a comparable stream handler.
|
|
111
118
|
has_stream = any(isinstance(h, logging.StreamHandler) for h in root.handlers)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/security_risk_assessment.j2
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/system_prompt_interactive.j2
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/agent/prompts/system_prompt_planning.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/no_op_condenser.py
RENAMED
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/context/condenser/pipeline_condenser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/impl/local_conversation.py
RENAMED
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/impl/remote_conversation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/serialization_diff.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/visualizer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/conversation/visualizer/default.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/event/llm_convertible/observation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/remote/async_remote_workspace.py
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.4.0 → openhands_sdk-1.4.1}/openhands/sdk/workspace/remote/remote_workspace_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|