PraisonAI 3.0.0__py3-none-any.whl
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.
- praisonai/__init__.py +54 -0
- praisonai/__main__.py +15 -0
- praisonai/acp/__init__.py +54 -0
- praisonai/acp/config.py +159 -0
- praisonai/acp/server.py +587 -0
- praisonai/acp/session.py +219 -0
- praisonai/adapters/__init__.py +50 -0
- praisonai/adapters/readers.py +395 -0
- praisonai/adapters/rerankers.py +315 -0
- praisonai/adapters/retrievers.py +394 -0
- praisonai/adapters/vector_stores.py +409 -0
- praisonai/agent_scheduler.py +337 -0
- praisonai/agents_generator.py +903 -0
- praisonai/api/call.py +292 -0
- praisonai/auto.py +1197 -0
- praisonai/capabilities/__init__.py +275 -0
- praisonai/capabilities/a2a.py +140 -0
- praisonai/capabilities/assistants.py +283 -0
- praisonai/capabilities/audio.py +320 -0
- praisonai/capabilities/batches.py +469 -0
- praisonai/capabilities/completions.py +336 -0
- praisonai/capabilities/container_files.py +155 -0
- praisonai/capabilities/containers.py +93 -0
- praisonai/capabilities/embeddings.py +158 -0
- praisonai/capabilities/files.py +467 -0
- praisonai/capabilities/fine_tuning.py +293 -0
- praisonai/capabilities/guardrails.py +182 -0
- praisonai/capabilities/images.py +330 -0
- praisonai/capabilities/mcp.py +190 -0
- praisonai/capabilities/messages.py +270 -0
- praisonai/capabilities/moderations.py +154 -0
- praisonai/capabilities/ocr.py +217 -0
- praisonai/capabilities/passthrough.py +204 -0
- praisonai/capabilities/rag.py +207 -0
- praisonai/capabilities/realtime.py +160 -0
- praisonai/capabilities/rerank.py +165 -0
- praisonai/capabilities/responses.py +266 -0
- praisonai/capabilities/search.py +109 -0
- praisonai/capabilities/skills.py +133 -0
- praisonai/capabilities/vector_store_files.py +334 -0
- praisonai/capabilities/vector_stores.py +304 -0
- praisonai/capabilities/videos.py +141 -0
- praisonai/chainlit_ui.py +304 -0
- praisonai/chat/__init__.py +106 -0
- praisonai/chat/app.py +125 -0
- praisonai/cli/__init__.py +26 -0
- praisonai/cli/app.py +213 -0
- praisonai/cli/commands/__init__.py +75 -0
- praisonai/cli/commands/acp.py +70 -0
- praisonai/cli/commands/completion.py +333 -0
- praisonai/cli/commands/config.py +166 -0
- praisonai/cli/commands/debug.py +142 -0
- praisonai/cli/commands/diag.py +55 -0
- praisonai/cli/commands/doctor.py +166 -0
- praisonai/cli/commands/environment.py +179 -0
- praisonai/cli/commands/lsp.py +112 -0
- praisonai/cli/commands/mcp.py +210 -0
- praisonai/cli/commands/profile.py +457 -0
- praisonai/cli/commands/run.py +228 -0
- praisonai/cli/commands/schedule.py +150 -0
- praisonai/cli/commands/serve.py +97 -0
- praisonai/cli/commands/session.py +212 -0
- praisonai/cli/commands/traces.py +145 -0
- praisonai/cli/commands/version.py +101 -0
- praisonai/cli/configuration/__init__.py +18 -0
- praisonai/cli/configuration/loader.py +353 -0
- praisonai/cli/configuration/paths.py +114 -0
- praisonai/cli/configuration/schema.py +164 -0
- praisonai/cli/features/__init__.py +268 -0
- praisonai/cli/features/acp.py +236 -0
- praisonai/cli/features/action_orchestrator.py +546 -0
- praisonai/cli/features/agent_scheduler.py +773 -0
- praisonai/cli/features/agent_tools.py +474 -0
- praisonai/cli/features/agents.py +375 -0
- praisonai/cli/features/at_mentions.py +471 -0
- praisonai/cli/features/auto_memory.py +182 -0
- praisonai/cli/features/autonomy_mode.py +490 -0
- praisonai/cli/features/background.py +356 -0
- praisonai/cli/features/base.py +168 -0
- praisonai/cli/features/capabilities.py +1326 -0
- praisonai/cli/features/checkpoints.py +338 -0
- praisonai/cli/features/code_intelligence.py +652 -0
- praisonai/cli/features/compaction.py +294 -0
- praisonai/cli/features/compare.py +534 -0
- praisonai/cli/features/cost_tracker.py +514 -0
- praisonai/cli/features/debug.py +810 -0
- praisonai/cli/features/deploy.py +517 -0
- praisonai/cli/features/diag.py +289 -0
- praisonai/cli/features/doctor/__init__.py +63 -0
- praisonai/cli/features/doctor/checks/__init__.py +24 -0
- praisonai/cli/features/doctor/checks/acp_checks.py +240 -0
- praisonai/cli/features/doctor/checks/config_checks.py +366 -0
- praisonai/cli/features/doctor/checks/db_checks.py +366 -0
- praisonai/cli/features/doctor/checks/env_checks.py +543 -0
- praisonai/cli/features/doctor/checks/lsp_checks.py +199 -0
- praisonai/cli/features/doctor/checks/mcp_checks.py +349 -0
- praisonai/cli/features/doctor/checks/memory_checks.py +268 -0
- praisonai/cli/features/doctor/checks/network_checks.py +251 -0
- praisonai/cli/features/doctor/checks/obs_checks.py +328 -0
- praisonai/cli/features/doctor/checks/performance_checks.py +235 -0
- praisonai/cli/features/doctor/checks/permissions_checks.py +259 -0
- praisonai/cli/features/doctor/checks/selftest_checks.py +322 -0
- praisonai/cli/features/doctor/checks/serve_checks.py +426 -0
- praisonai/cli/features/doctor/checks/skills_checks.py +231 -0
- praisonai/cli/features/doctor/checks/tools_checks.py +371 -0
- praisonai/cli/features/doctor/engine.py +266 -0
- praisonai/cli/features/doctor/formatters.py +310 -0
- praisonai/cli/features/doctor/handler.py +397 -0
- praisonai/cli/features/doctor/models.py +264 -0
- praisonai/cli/features/doctor/registry.py +239 -0
- praisonai/cli/features/endpoints.py +1019 -0
- praisonai/cli/features/eval.py +560 -0
- praisonai/cli/features/external_agents.py +231 -0
- praisonai/cli/features/fast_context.py +410 -0
- praisonai/cli/features/flow_display.py +566 -0
- praisonai/cli/features/git_integration.py +651 -0
- praisonai/cli/features/guardrail.py +171 -0
- praisonai/cli/features/handoff.py +185 -0
- praisonai/cli/features/hooks.py +583 -0
- praisonai/cli/features/image.py +384 -0
- praisonai/cli/features/interactive_runtime.py +585 -0
- praisonai/cli/features/interactive_tools.py +380 -0
- praisonai/cli/features/interactive_tui.py +603 -0
- praisonai/cli/features/jobs.py +632 -0
- praisonai/cli/features/knowledge.py +531 -0
- praisonai/cli/features/lite.py +244 -0
- praisonai/cli/features/lsp_cli.py +225 -0
- praisonai/cli/features/mcp.py +169 -0
- praisonai/cli/features/message_queue.py +587 -0
- praisonai/cli/features/metrics.py +211 -0
- praisonai/cli/features/n8n.py +673 -0
- praisonai/cli/features/observability.py +293 -0
- praisonai/cli/features/ollama.py +361 -0
- praisonai/cli/features/output_style.py +273 -0
- praisonai/cli/features/package.py +631 -0
- praisonai/cli/features/performance.py +308 -0
- praisonai/cli/features/persistence.py +636 -0
- praisonai/cli/features/profile.py +226 -0
- praisonai/cli/features/profiler/__init__.py +81 -0
- praisonai/cli/features/profiler/core.py +558 -0
- praisonai/cli/features/profiler/optimizations.py +652 -0
- praisonai/cli/features/profiler/suite.py +386 -0
- praisonai/cli/features/profiling.py +350 -0
- praisonai/cli/features/queue/__init__.py +73 -0
- praisonai/cli/features/queue/manager.py +395 -0
- praisonai/cli/features/queue/models.py +286 -0
- praisonai/cli/features/queue/persistence.py +564 -0
- praisonai/cli/features/queue/scheduler.py +484 -0
- praisonai/cli/features/queue/worker.py +372 -0
- praisonai/cli/features/recipe.py +1723 -0
- praisonai/cli/features/recipes.py +449 -0
- praisonai/cli/features/registry.py +229 -0
- praisonai/cli/features/repo_map.py +860 -0
- praisonai/cli/features/router.py +466 -0
- praisonai/cli/features/sandbox_executor.py +515 -0
- praisonai/cli/features/serve.py +829 -0
- praisonai/cli/features/session.py +222 -0
- praisonai/cli/features/skills.py +856 -0
- praisonai/cli/features/slash_commands.py +650 -0
- praisonai/cli/features/telemetry.py +179 -0
- praisonai/cli/features/templates.py +1384 -0
- praisonai/cli/features/thinking.py +305 -0
- praisonai/cli/features/todo.py +334 -0
- praisonai/cli/features/tools.py +680 -0
- praisonai/cli/features/tui/__init__.py +83 -0
- praisonai/cli/features/tui/app.py +580 -0
- praisonai/cli/features/tui/cli.py +566 -0
- praisonai/cli/features/tui/debug.py +511 -0
- praisonai/cli/features/tui/events.py +99 -0
- praisonai/cli/features/tui/mock_provider.py +328 -0
- praisonai/cli/features/tui/orchestrator.py +652 -0
- praisonai/cli/features/tui/screens/__init__.py +50 -0
- praisonai/cli/features/tui/screens/main.py +245 -0
- praisonai/cli/features/tui/screens/queue.py +174 -0
- praisonai/cli/features/tui/screens/session.py +124 -0
- praisonai/cli/features/tui/screens/settings.py +148 -0
- praisonai/cli/features/tui/widgets/__init__.py +56 -0
- praisonai/cli/features/tui/widgets/chat.py +261 -0
- praisonai/cli/features/tui/widgets/composer.py +224 -0
- praisonai/cli/features/tui/widgets/queue_panel.py +200 -0
- praisonai/cli/features/tui/widgets/status.py +167 -0
- praisonai/cli/features/tui/widgets/tool_panel.py +248 -0
- praisonai/cli/features/workflow.py +720 -0
- praisonai/cli/legacy.py +236 -0
- praisonai/cli/main.py +5559 -0
- praisonai/cli/schedule_cli.py +54 -0
- praisonai/cli/state/__init__.py +31 -0
- praisonai/cli/state/identifiers.py +161 -0
- praisonai/cli/state/sessions.py +313 -0
- praisonai/code/__init__.py +93 -0
- praisonai/code/agent_tools.py +344 -0
- praisonai/code/diff/__init__.py +21 -0
- praisonai/code/diff/diff_strategy.py +432 -0
- praisonai/code/tools/__init__.py +27 -0
- praisonai/code/tools/apply_diff.py +221 -0
- praisonai/code/tools/execute_command.py +275 -0
- praisonai/code/tools/list_files.py +274 -0
- praisonai/code/tools/read_file.py +206 -0
- praisonai/code/tools/search_replace.py +248 -0
- praisonai/code/tools/write_file.py +217 -0
- praisonai/code/utils/__init__.py +46 -0
- praisonai/code/utils/file_utils.py +307 -0
- praisonai/code/utils/ignore_utils.py +308 -0
- praisonai/code/utils/text_utils.py +276 -0
- praisonai/db/__init__.py +64 -0
- praisonai/db/adapter.py +531 -0
- praisonai/deploy/__init__.py +62 -0
- praisonai/deploy/api.py +231 -0
- praisonai/deploy/docker.py +454 -0
- praisonai/deploy/doctor.py +367 -0
- praisonai/deploy/main.py +327 -0
- praisonai/deploy/models.py +179 -0
- praisonai/deploy/providers/__init__.py +33 -0
- praisonai/deploy/providers/aws.py +331 -0
- praisonai/deploy/providers/azure.py +358 -0
- praisonai/deploy/providers/base.py +101 -0
- praisonai/deploy/providers/gcp.py +314 -0
- praisonai/deploy/schema.py +208 -0
- praisonai/deploy.py +185 -0
- praisonai/endpoints/__init__.py +53 -0
- praisonai/endpoints/a2u_server.py +410 -0
- praisonai/endpoints/discovery.py +165 -0
- praisonai/endpoints/providers/__init__.py +28 -0
- praisonai/endpoints/providers/a2a.py +253 -0
- praisonai/endpoints/providers/a2u.py +208 -0
- praisonai/endpoints/providers/agents_api.py +171 -0
- praisonai/endpoints/providers/base.py +231 -0
- praisonai/endpoints/providers/mcp.py +263 -0
- praisonai/endpoints/providers/recipe.py +206 -0
- praisonai/endpoints/providers/tools_mcp.py +150 -0
- praisonai/endpoints/registry.py +131 -0
- praisonai/endpoints/server.py +161 -0
- praisonai/inbuilt_tools/__init__.py +24 -0
- praisonai/inbuilt_tools/autogen_tools.py +117 -0
- praisonai/inc/__init__.py +2 -0
- praisonai/inc/config.py +96 -0
- praisonai/inc/models.py +155 -0
- praisonai/integrations/__init__.py +56 -0
- praisonai/integrations/base.py +303 -0
- praisonai/integrations/claude_code.py +270 -0
- praisonai/integrations/codex_cli.py +255 -0
- praisonai/integrations/cursor_cli.py +195 -0
- praisonai/integrations/gemini_cli.py +222 -0
- praisonai/jobs/__init__.py +67 -0
- praisonai/jobs/executor.py +425 -0
- praisonai/jobs/models.py +230 -0
- praisonai/jobs/router.py +314 -0
- praisonai/jobs/server.py +186 -0
- praisonai/jobs/store.py +203 -0
- praisonai/llm/__init__.py +66 -0
- praisonai/llm/registry.py +382 -0
- praisonai/mcp_server/__init__.py +152 -0
- praisonai/mcp_server/adapters/__init__.py +74 -0
- praisonai/mcp_server/adapters/agents.py +128 -0
- praisonai/mcp_server/adapters/capabilities.py +168 -0
- praisonai/mcp_server/adapters/cli_tools.py +568 -0
- praisonai/mcp_server/adapters/extended_capabilities.py +462 -0
- praisonai/mcp_server/adapters/knowledge.py +93 -0
- praisonai/mcp_server/adapters/memory.py +104 -0
- praisonai/mcp_server/adapters/prompts.py +306 -0
- praisonai/mcp_server/adapters/resources.py +124 -0
- praisonai/mcp_server/adapters/tools_bridge.py +280 -0
- praisonai/mcp_server/auth/__init__.py +48 -0
- praisonai/mcp_server/auth/api_key.py +291 -0
- praisonai/mcp_server/auth/oauth.py +460 -0
- praisonai/mcp_server/auth/oidc.py +289 -0
- praisonai/mcp_server/auth/scopes.py +260 -0
- praisonai/mcp_server/cli.py +852 -0
- praisonai/mcp_server/elicitation.py +445 -0
- praisonai/mcp_server/icons.py +302 -0
- praisonai/mcp_server/recipe_adapter.py +573 -0
- praisonai/mcp_server/recipe_cli.py +824 -0
- praisonai/mcp_server/registry.py +703 -0
- praisonai/mcp_server/sampling.py +422 -0
- praisonai/mcp_server/server.py +490 -0
- praisonai/mcp_server/tasks.py +443 -0
- praisonai/mcp_server/transports/__init__.py +18 -0
- praisonai/mcp_server/transports/http_stream.py +376 -0
- praisonai/mcp_server/transports/stdio.py +132 -0
- praisonai/persistence/__init__.py +84 -0
- praisonai/persistence/config.py +238 -0
- praisonai/persistence/conversation/__init__.py +25 -0
- praisonai/persistence/conversation/async_mysql.py +427 -0
- praisonai/persistence/conversation/async_postgres.py +410 -0
- praisonai/persistence/conversation/async_sqlite.py +371 -0
- praisonai/persistence/conversation/base.py +151 -0
- praisonai/persistence/conversation/json_store.py +250 -0
- praisonai/persistence/conversation/mysql.py +387 -0
- praisonai/persistence/conversation/postgres.py +401 -0
- praisonai/persistence/conversation/singlestore.py +240 -0
- praisonai/persistence/conversation/sqlite.py +341 -0
- praisonai/persistence/conversation/supabase.py +203 -0
- praisonai/persistence/conversation/surrealdb.py +287 -0
- praisonai/persistence/factory.py +301 -0
- praisonai/persistence/hooks/__init__.py +18 -0
- praisonai/persistence/hooks/agent_hooks.py +297 -0
- praisonai/persistence/knowledge/__init__.py +26 -0
- praisonai/persistence/knowledge/base.py +144 -0
- praisonai/persistence/knowledge/cassandra.py +232 -0
- praisonai/persistence/knowledge/chroma.py +295 -0
- praisonai/persistence/knowledge/clickhouse.py +242 -0
- praisonai/persistence/knowledge/cosmosdb_vector.py +438 -0
- praisonai/persistence/knowledge/couchbase.py +286 -0
- praisonai/persistence/knowledge/lancedb.py +216 -0
- praisonai/persistence/knowledge/langchain_adapter.py +291 -0
- praisonai/persistence/knowledge/lightrag_adapter.py +212 -0
- praisonai/persistence/knowledge/llamaindex_adapter.py +256 -0
- praisonai/persistence/knowledge/milvus.py +277 -0
- praisonai/persistence/knowledge/mongodb_vector.py +306 -0
- praisonai/persistence/knowledge/pgvector.py +335 -0
- praisonai/persistence/knowledge/pinecone.py +253 -0
- praisonai/persistence/knowledge/qdrant.py +301 -0
- praisonai/persistence/knowledge/redis_vector.py +291 -0
- praisonai/persistence/knowledge/singlestore_vector.py +299 -0
- praisonai/persistence/knowledge/surrealdb_vector.py +309 -0
- praisonai/persistence/knowledge/upstash_vector.py +266 -0
- praisonai/persistence/knowledge/weaviate.py +223 -0
- praisonai/persistence/migrations/__init__.py +10 -0
- praisonai/persistence/migrations/manager.py +251 -0
- praisonai/persistence/orchestrator.py +406 -0
- praisonai/persistence/state/__init__.py +21 -0
- praisonai/persistence/state/async_mongodb.py +200 -0
- praisonai/persistence/state/base.py +107 -0
- praisonai/persistence/state/dynamodb.py +226 -0
- praisonai/persistence/state/firestore.py +175 -0
- praisonai/persistence/state/gcs.py +155 -0
- praisonai/persistence/state/memory.py +245 -0
- praisonai/persistence/state/mongodb.py +158 -0
- praisonai/persistence/state/redis.py +190 -0
- praisonai/persistence/state/upstash.py +144 -0
- praisonai/persistence/tests/__init__.py +3 -0
- praisonai/persistence/tests/test_all_backends.py +633 -0
- praisonai/profiler.py +1214 -0
- praisonai/recipe/__init__.py +134 -0
- praisonai/recipe/bridge.py +278 -0
- praisonai/recipe/core.py +893 -0
- praisonai/recipe/exceptions.py +54 -0
- praisonai/recipe/history.py +402 -0
- praisonai/recipe/models.py +266 -0
- praisonai/recipe/operations.py +440 -0
- praisonai/recipe/policy.py +422 -0
- praisonai/recipe/registry.py +849 -0
- praisonai/recipe/runtime.py +214 -0
- praisonai/recipe/security.py +711 -0
- praisonai/recipe/serve.py +859 -0
- praisonai/recipe/server.py +613 -0
- praisonai/scheduler/__init__.py +45 -0
- praisonai/scheduler/agent_scheduler.py +552 -0
- praisonai/scheduler/base.py +124 -0
- praisonai/scheduler/daemon_manager.py +225 -0
- praisonai/scheduler/state_manager.py +155 -0
- praisonai/scheduler/yaml_loader.py +193 -0
- praisonai/scheduler.py +194 -0
- praisonai/setup/__init__.py +1 -0
- praisonai/setup/build.py +21 -0
- praisonai/setup/post_install.py +23 -0
- praisonai/setup/setup_conda_env.py +25 -0
- praisonai/setup.py +16 -0
- praisonai/templates/__init__.py +116 -0
- praisonai/templates/cache.py +364 -0
- praisonai/templates/dependency_checker.py +358 -0
- praisonai/templates/discovery.py +391 -0
- praisonai/templates/loader.py +564 -0
- praisonai/templates/registry.py +511 -0
- praisonai/templates/resolver.py +206 -0
- praisonai/templates/security.py +327 -0
- praisonai/templates/tool_override.py +498 -0
- praisonai/templates/tools_doctor.py +256 -0
- praisonai/test.py +105 -0
- praisonai/train.py +562 -0
- praisonai/train_vision.py +306 -0
- praisonai/ui/agents.py +824 -0
- praisonai/ui/callbacks.py +57 -0
- praisonai/ui/chainlit_compat.py +246 -0
- praisonai/ui/chat.py +532 -0
- praisonai/ui/code.py +717 -0
- praisonai/ui/colab.py +474 -0
- praisonai/ui/colab_chainlit.py +81 -0
- praisonai/ui/components/aicoder.py +284 -0
- praisonai/ui/context.py +283 -0
- praisonai/ui/database_config.py +56 -0
- praisonai/ui/db.py +294 -0
- praisonai/ui/realtime.py +488 -0
- praisonai/ui/realtimeclient/__init__.py +756 -0
- praisonai/ui/realtimeclient/tools.py +242 -0
- praisonai/ui/sql_alchemy.py +710 -0
- praisonai/upload_vision.py +140 -0
- praisonai/version.py +1 -0
- praisonai-3.0.0.dist-info/METADATA +3493 -0
- praisonai-3.0.0.dist-info/RECORD +393 -0
- praisonai-3.0.0.dist-info/WHEEL +5 -0
- praisonai-3.0.0.dist-info/entry_points.txt +4 -0
- praisonai-3.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Context Compaction CLI Feature for PraisonAI.
|
|
3
|
+
|
|
4
|
+
Provides CLI commands for managing context compaction.
|
|
5
|
+
|
|
6
|
+
Commands:
|
|
7
|
+
- praisonai compaction status # Show settings
|
|
8
|
+
- praisonai compaction set <strategy> # Set strategy
|
|
9
|
+
- praisonai compaction stats # Show statistics
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
import json
|
|
14
|
+
from typing import Dict, Any
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CompactionHandler:
|
|
18
|
+
"""
|
|
19
|
+
Handler for compaction CLI commands.
|
|
20
|
+
|
|
21
|
+
Provides functionality to:
|
|
22
|
+
- Show current compaction settings
|
|
23
|
+
- Set compaction strategy (truncate, sliding, summarize, smart)
|
|
24
|
+
- Display compaction statistics
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
CONFIG_FILE = ".praison/compaction.json"
|
|
28
|
+
|
|
29
|
+
def __init__(self, verbose: bool = False):
|
|
30
|
+
self.verbose = verbose
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def feature_name(self) -> str:
|
|
34
|
+
return "compaction"
|
|
35
|
+
|
|
36
|
+
def _get_config_path(self) -> str:
|
|
37
|
+
"""Get path to config file."""
|
|
38
|
+
return os.path.join(os.getcwd(), self.CONFIG_FILE)
|
|
39
|
+
|
|
40
|
+
def _load_config(self) -> Dict[str, Any]:
|
|
41
|
+
"""Load config from file."""
|
|
42
|
+
config_path = self._get_config_path()
|
|
43
|
+
if os.path.exists(config_path):
|
|
44
|
+
try:
|
|
45
|
+
with open(config_path, 'r') as f:
|
|
46
|
+
return json.load(f)
|
|
47
|
+
except (json.JSONDecodeError, IOError):
|
|
48
|
+
pass
|
|
49
|
+
return {}
|
|
50
|
+
|
|
51
|
+
def _save_config(self, config: Dict[str, Any]):
|
|
52
|
+
"""Save config to file."""
|
|
53
|
+
config_path = self._get_config_path()
|
|
54
|
+
os.makedirs(os.path.dirname(config_path), exist_ok=True)
|
|
55
|
+
with open(config_path, 'w') as f:
|
|
56
|
+
json.dump(config, f, indent=2)
|
|
57
|
+
|
|
58
|
+
def status(self) -> Dict[str, Any]:
|
|
59
|
+
"""
|
|
60
|
+
Show current compaction settings.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Current compaction configuration
|
|
64
|
+
"""
|
|
65
|
+
config = self._load_config()
|
|
66
|
+
|
|
67
|
+
result = {
|
|
68
|
+
"strategy": config.get("strategy", "truncate"),
|
|
69
|
+
"max_tokens": config.get("max_tokens", 8000),
|
|
70
|
+
"target_tokens": config.get("target_tokens", 6000),
|
|
71
|
+
"preserve_system": config.get("preserve_system", True),
|
|
72
|
+
"preserve_recent": config.get("preserve_recent", 5),
|
|
73
|
+
"config_file": self._get_config_path()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
self._print_status(result)
|
|
77
|
+
return result
|
|
78
|
+
|
|
79
|
+
def _print_status(self, status: Dict[str, Any]):
|
|
80
|
+
"""Print status in formatted output."""
|
|
81
|
+
try:
|
|
82
|
+
from rich.console import Console
|
|
83
|
+
from rich.table import Table
|
|
84
|
+
from rich.panel import Panel
|
|
85
|
+
|
|
86
|
+
console = Console()
|
|
87
|
+
|
|
88
|
+
table = Table(show_header=False, box=None)
|
|
89
|
+
table.add_column("Setting", style="cyan")
|
|
90
|
+
table.add_column("Value", style="green")
|
|
91
|
+
|
|
92
|
+
table.add_row("Strategy", status["strategy"])
|
|
93
|
+
table.add_row("Max Tokens", f"{status['max_tokens']:,}")
|
|
94
|
+
table.add_row("Target Tokens", f"{status['target_tokens']:,}")
|
|
95
|
+
table.add_row("Preserve System", "✓" if status["preserve_system"] else "✗")
|
|
96
|
+
table.add_row("Preserve Recent", str(status["preserve_recent"]))
|
|
97
|
+
table.add_row("Config File", status["config_file"])
|
|
98
|
+
|
|
99
|
+
console.print(Panel(table, title="Context Compaction Status", border_style="blue"))
|
|
100
|
+
|
|
101
|
+
except ImportError:
|
|
102
|
+
print("Context Compaction Status:")
|
|
103
|
+
print(f" Strategy: {status['strategy']}")
|
|
104
|
+
print(f" Max Tokens: {status['max_tokens']:,}")
|
|
105
|
+
print(f" Target Tokens: {status['target_tokens']:,}")
|
|
106
|
+
print(f" Preserve System: {status['preserve_system']}")
|
|
107
|
+
print(f" Preserve Recent: {status['preserve_recent']}")
|
|
108
|
+
print(f" Config File: {status['config_file']}")
|
|
109
|
+
|
|
110
|
+
def set_strategy(self, strategy: str) -> Dict[str, Any]:
|
|
111
|
+
"""
|
|
112
|
+
Set compaction strategy.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
strategy: Compaction strategy (truncate, sliding, summarize, smart)
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
Updated configuration
|
|
119
|
+
"""
|
|
120
|
+
valid_strategies = ["truncate", "sliding", "summarize", "smart"]
|
|
121
|
+
strategy = strategy.lower()
|
|
122
|
+
|
|
123
|
+
if strategy not in valid_strategies:
|
|
124
|
+
self._print_error(f"Invalid strategy: {strategy}. Valid strategies: {', '.join(valid_strategies)}")
|
|
125
|
+
return {"error": f"Invalid strategy: {strategy}"}
|
|
126
|
+
|
|
127
|
+
config = self._load_config()
|
|
128
|
+
config["strategy"] = strategy
|
|
129
|
+
self._save_config(config)
|
|
130
|
+
|
|
131
|
+
descriptions = {
|
|
132
|
+
"truncate": "Remove oldest messages",
|
|
133
|
+
"sliding": "Keep sliding window of recent messages",
|
|
134
|
+
"summarize": "Summarize older messages",
|
|
135
|
+
"smart": "Intelligent compaction based on importance"
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
result = {
|
|
139
|
+
"strategy": strategy,
|
|
140
|
+
"description": descriptions[strategy],
|
|
141
|
+
"message": f"Compaction strategy set to '{strategy}'"
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
self._print_success(result["message"])
|
|
145
|
+
return result
|
|
146
|
+
|
|
147
|
+
def _print_error(self, message: str):
|
|
148
|
+
"""Print error message."""
|
|
149
|
+
try:
|
|
150
|
+
from rich.console import Console
|
|
151
|
+
Console().print(f"[red]Error: {message}[/red]")
|
|
152
|
+
except ImportError:
|
|
153
|
+
print(f"Error: {message}")
|
|
154
|
+
|
|
155
|
+
def _print_success(self, message: str):
|
|
156
|
+
"""Print success message."""
|
|
157
|
+
try:
|
|
158
|
+
from rich.console import Console
|
|
159
|
+
Console().print(f"[green]✓ {message}[/green]")
|
|
160
|
+
except ImportError:
|
|
161
|
+
print(f"✓ {message}")
|
|
162
|
+
|
|
163
|
+
def stats(self) -> Dict[str, Any]:
|
|
164
|
+
"""
|
|
165
|
+
Show compaction statistics.
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
Compaction statistics
|
|
169
|
+
"""
|
|
170
|
+
config = self._load_config()
|
|
171
|
+
stats = config.get("stats", {})
|
|
172
|
+
|
|
173
|
+
result = {
|
|
174
|
+
"compaction_count": stats.get("compaction_count", 0),
|
|
175
|
+
"total_tokens_saved": stats.get("total_tokens_saved", 0),
|
|
176
|
+
"total_messages_removed": stats.get("total_messages_removed", 0),
|
|
177
|
+
"average_compression_ratio": stats.get("average_compression_ratio", 0.0)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
self._print_stats(result)
|
|
181
|
+
return result
|
|
182
|
+
|
|
183
|
+
def _print_stats(self, stats: Dict[str, Any]):
|
|
184
|
+
"""Print statistics in formatted output."""
|
|
185
|
+
try:
|
|
186
|
+
from rich.console import Console
|
|
187
|
+
from rich.table import Table
|
|
188
|
+
from rich.panel import Panel
|
|
189
|
+
|
|
190
|
+
console = Console()
|
|
191
|
+
|
|
192
|
+
if stats["compaction_count"] == 0:
|
|
193
|
+
console.print("[yellow]No compaction operations recorded yet.[/yellow]")
|
|
194
|
+
return
|
|
195
|
+
|
|
196
|
+
table = Table(show_header=False, box=None)
|
|
197
|
+
table.add_column("Metric", style="cyan")
|
|
198
|
+
table.add_column("Value", style="green")
|
|
199
|
+
|
|
200
|
+
table.add_row("Compactions", str(stats["compaction_count"]))
|
|
201
|
+
table.add_row("Tokens Saved", f"{stats['total_tokens_saved']:,}")
|
|
202
|
+
table.add_row("Messages Removed", str(stats["total_messages_removed"]))
|
|
203
|
+
table.add_row("Avg Compression", f"{stats['average_compression_ratio']:.1%}")
|
|
204
|
+
|
|
205
|
+
console.print(Panel(table, title="Compaction Statistics", border_style="blue"))
|
|
206
|
+
|
|
207
|
+
except ImportError:
|
|
208
|
+
print("Compaction Statistics:")
|
|
209
|
+
print(f" Compactions: {stats['compaction_count']}")
|
|
210
|
+
print(f" Tokens Saved: {stats['total_tokens_saved']:,}")
|
|
211
|
+
print(f" Messages Removed: {stats['total_messages_removed']}")
|
|
212
|
+
print(f" Avg Compression: {stats['average_compression_ratio']:.1%}")
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def handle_compaction_command(args: list) -> int:
|
|
216
|
+
"""
|
|
217
|
+
Handle compaction CLI commands.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
args: Command arguments
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
Exit code (0 for success)
|
|
224
|
+
"""
|
|
225
|
+
if not args:
|
|
226
|
+
args = ["status"]
|
|
227
|
+
|
|
228
|
+
command = args[0].lower()
|
|
229
|
+
handler = CompactionHandler()
|
|
230
|
+
|
|
231
|
+
if command == "status":
|
|
232
|
+
handler.status()
|
|
233
|
+
return 0
|
|
234
|
+
|
|
235
|
+
elif command == "set":
|
|
236
|
+
if len(args) < 2:
|
|
237
|
+
handler._print_error("Usage: praisonai compaction set <strategy>")
|
|
238
|
+
print("Strategies: truncate, sliding, summarize, smart")
|
|
239
|
+
return 1
|
|
240
|
+
result = handler.set_strategy(args[1])
|
|
241
|
+
return 0 if "error" not in result else 1
|
|
242
|
+
|
|
243
|
+
elif command == "stats":
|
|
244
|
+
handler.stats()
|
|
245
|
+
return 0
|
|
246
|
+
|
|
247
|
+
elif command == "help":
|
|
248
|
+
_print_help()
|
|
249
|
+
return 0
|
|
250
|
+
|
|
251
|
+
else:
|
|
252
|
+
handler._print_error(f"Unknown command: {command}")
|
|
253
|
+
_print_help()
|
|
254
|
+
return 1
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def _print_help():
|
|
258
|
+
"""Print help message."""
|
|
259
|
+
try:
|
|
260
|
+
from rich.console import Console
|
|
261
|
+
from rich.panel import Panel
|
|
262
|
+
|
|
263
|
+
console = Console()
|
|
264
|
+
help_text = """
|
|
265
|
+
[bold]Context Compaction Commands[/bold]
|
|
266
|
+
|
|
267
|
+
[cyan]praisonai compaction status[/cyan]
|
|
268
|
+
Show current compaction settings
|
|
269
|
+
|
|
270
|
+
[cyan]praisonai compaction set <strategy>[/cyan]
|
|
271
|
+
Set compaction strategy
|
|
272
|
+
|
|
273
|
+
Strategies:
|
|
274
|
+
• truncate - Remove oldest messages (default)
|
|
275
|
+
• sliding - Keep sliding window of recent messages
|
|
276
|
+
• summarize - Summarize older messages
|
|
277
|
+
• smart - Intelligent compaction based on importance
|
|
278
|
+
|
|
279
|
+
[cyan]praisonai compaction stats[/cyan]
|
|
280
|
+
Show compaction statistics
|
|
281
|
+
|
|
282
|
+
[cyan]praisonai compaction help[/cyan]
|
|
283
|
+
Show this help message
|
|
284
|
+
"""
|
|
285
|
+
console.print(Panel(help_text, title="Context Compaction Help", border_style="blue"))
|
|
286
|
+
|
|
287
|
+
except ImportError:
|
|
288
|
+
print("Context Compaction Commands:")
|
|
289
|
+
print(" praisonai compaction status - Show current settings")
|
|
290
|
+
print(" praisonai compaction set <strategy> - Set compaction strategy")
|
|
291
|
+
print(" praisonai compaction stats - Show statistics")
|
|
292
|
+
print(" praisonai compaction help - Show this help")
|
|
293
|
+
print("")
|
|
294
|
+
print("Strategies: truncate, sliding, summarize, smart")
|