claude-smart 0.2.47 → 0.2.48
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.
- package/.claude-plugin/marketplace.json +1 -1
- package/README.md +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/dashboard/app/sessions/[sessionId]/page.tsx +36 -2
- package/plugin/dashboard/package-lock.json +61 -390
- package/plugin/dashboard/package.json +2 -2
- package/plugin/pyproject.toml +1 -1
- package/plugin/uv.lock +1 -1
- package/plugin/vendor/reflexio/.env.example +7 -0
- package/plugin/vendor/reflexio/pyproject.toml +2 -1
- package/plugin/vendor/reflexio/reflexio/README.md +8 -5
- package/plugin/vendor/reflexio/reflexio/lib/_config.py +23 -18
- package/plugin/vendor/reflexio/reflexio/lib/_interactions.py +16 -1
- package/plugin/vendor/reflexio/reflexio/lib/_search.py +15 -11
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/enums.py +1 -0
- package/plugin/vendor/reflexio/reflexio/models/config_schema.py +24 -3
- package/plugin/vendor/reflexio/reflexio/server/README.md +25 -8
- package/plugin/vendor/reflexio/reflexio/server/__init__.py +21 -2
- package/plugin/vendor/reflexio/reflexio/server/api.py +133 -3273
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/README.md +4 -3
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/publisher_api.py +16 -1
- package/plugin/vendor/reflexio/reflexio/server/cache/reflexio_cache.py +62 -36
- package/plugin/vendor/reflexio/reflexio/server/deployment_profile.py +69 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_embedding.py +424 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_json_extraction.py +249 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_structured_output.py +195 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_subprocess.py +152 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_text_generation.py +980 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_types.py +110 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/litellm_client.py +73 -1819
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +56 -4
- package/plugin/vendor/reflexio/reflexio/server/middleware.py +244 -0
- package/plugin/vendor/reflexio/reflexio/server/operation_limiter.py +9 -1
- package/plugin/vendor/reflexio/reflexio/server/rate_limit.py +79 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/__init__.py +6 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/_common.py +25 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/_metering.py +98 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/braintrust.py +129 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/config.py +210 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/evaluation.py +549 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/interactions.py +259 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/playbooks.py +578 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/profiles.py +423 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/provenance.py +345 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/search.py +349 -0
- package/plugin/vendor/reflexio/reflexio/server/routes/system.py +261 -0
- package/plugin/vendor/reflexio/reflexio/server/scheduling.py +132 -0
- package/plugin/vendor/reflexio/reflexio/server/services/README.md +3 -2
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation/__init__.py +38 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_batch_progress.py +298 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_config_filter.py +152 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_extraction_lifecycle.py +243 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_should_run.py +299 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_status_change.py +273 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_usage_billing.py +258 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation_service.py +17 -1183
- package/plugin/vendor/reflexio/reflexio/server/services/deduplication_utils.py +8 -1
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_scheduler.py +26 -41
- package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +232 -123
- package/plugin/vendor/reflexio/reflexio/server/services/lineage/gc_scheduler.py +362 -81
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator.py +68 -490
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator_clustering.py +184 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator_postprocessing.py +130 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator_prompt_formatting.py +212 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/consolidator.py +258 -69
- package/plugin/vendor/reflexio/reflexio/server/services/publish_learning_worker.py +288 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +29 -4
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_agent_run.py +10 -1167
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +56 -351
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_governance.py +0 -1513
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_lineage.py +6 -1
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +7 -1281
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_share_links.py +30 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/__init__.py +9 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/_agent_run_store.py +506 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/_pending_tool_call_store.py +704 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/_run_tool_dependency_store.py +123 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/base/__init__.py +6 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/base/_deletion.py +263 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/base/_fts_vec.py +132 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/__init__.py +13 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_audit.py +122 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_erase_execution.py +465 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_purge.py +387 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_rebuild_hide.py +332 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_subject_barrier.py +511 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_agent.py +6 -3
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_user.py +13 -7
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/__init__.py +9 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/_interaction_store.py +263 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/_profile_store.py +896 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/_search.py +270 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +33 -8
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_agent_run.py +64 -370
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_share_links.py +20 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/__init__.py +9 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_agent_run_store.py +86 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_models.py +195 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_pending_tool_call_store.py +148 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_run_tool_dependency_store.py +38 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/__init__.py +13 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_audit.py +29 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_erase_execution.py +30 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_purge.py +74 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_rebuild_hide.py +32 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_subject_barrier.py +49 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/profiles/__init__.py +9 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/profiles/_interaction_store.py +73 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/{_profiles.py → profiles/_profile_store.py} +44 -86
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/profiles/_search.py +32 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_governance.py +0 -148
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""Shared types + exceptions for the ``litellm_client`` facade (Tier-2.5 leaf).
|
|
2
|
+
|
|
3
|
+
Stateless leaf module: the config dataclass, the tool-calling response dataclass,
|
|
4
|
+
and the three client exceptions. Both the facade and the concern mixins import
|
|
5
|
+
these, so keeping them in a dependency-free leaf prevents a mixin<->facade cycle.
|
|
6
|
+
|
|
7
|
+
Bodies are moved VERBATIM from the former monolithic ``litellm_client.py`` — no
|
|
8
|
+
behavior change. ``LiteLLMConfig``/``ToolCallingChatResponse``/``LiteLLMClientError``
|
|
9
|
+
are re-exported by import binding from the facade (SINK-2, identity-preserving)
|
|
10
|
+
so the ~102 importers are unchanged.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
from dataclasses import dataclass, field
|
|
15
|
+
from typing import Any
|
|
16
|
+
|
|
17
|
+
from pydantic import BaseModel
|
|
18
|
+
|
|
19
|
+
from reflexio.models.config_schema import APIKeyConfig
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class LiteLLMConfig:
|
|
24
|
+
"""
|
|
25
|
+
Configuration for LiteLLM client.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
model: Model name to use (e.g., 'gpt-4o', 'claude-3-5-sonnet-20241022').
|
|
29
|
+
temperature: Temperature for response generation (0.0 to 2.0).
|
|
30
|
+
max_tokens: Maximum tokens to generate.
|
|
31
|
+
timeout: Request timeout in seconds.
|
|
32
|
+
max_retries: Maximum same-model retry attempts. Used by the embedding
|
|
33
|
+
path (litellm's num_retries) and clamped in _build_completion_params.
|
|
34
|
+
NOT used on the chat-completion path — that forces num_retries=0 so a
|
|
35
|
+
hung primary can't be retried before the fallback (PYTHON-FASTAPI-62).
|
|
36
|
+
Default 3.
|
|
37
|
+
retry_delay: Currently unused — LiteLLM owns retry backoff. Kept for
|
|
38
|
+
backward compatibility; remove in a follow-up sweep.
|
|
39
|
+
top_p: Top-p sampling parameter.
|
|
40
|
+
api_key_config: Optional API key configuration from Config (overrides env vars).
|
|
41
|
+
fallback_models: Models LiteLLM tries in order after the primary's single
|
|
42
|
+
attempt. Passed directly to litellm's fallbacks param.
|
|
43
|
+
Default is an empty list (no fallback) so local reflexio and the
|
|
44
|
+
claude-smart integration are never silently routed to an unintended
|
|
45
|
+
provider. Production opts in via the env var
|
|
46
|
+
REFLEXIO_LLM_FALLBACK_MODELS (comma-separated, e.g. "gpt-5.4-mini").
|
|
47
|
+
Self-references are deduped at request time.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
model: str
|
|
51
|
+
temperature: float = 0.7
|
|
52
|
+
max_tokens: int | None = None
|
|
53
|
+
timeout: int = 120
|
|
54
|
+
max_retries: int = 3
|
|
55
|
+
retry_delay: float = 1.0
|
|
56
|
+
top_p: float = 1.0
|
|
57
|
+
api_key_config: APIKeyConfig | None = None
|
|
58
|
+
fallback_models: list[str] = field(
|
|
59
|
+
default_factory=lambda: [
|
|
60
|
+
m.strip()
|
|
61
|
+
for m in os.environ.get("REFLEXIO_LLM_FALLBACK_MODELS", "").split(",")
|
|
62
|
+
if m.strip()
|
|
63
|
+
]
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@dataclass
|
|
68
|
+
class ToolCallingChatResponse:
|
|
69
|
+
"""Response from a chat call that was routed in tool-calling mode.
|
|
70
|
+
|
|
71
|
+
Returned instead of ``str | BaseModel`` whenever the caller passes
|
|
72
|
+
``tools=...`` to ``generate_chat_response``. Callers inspect
|
|
73
|
+
``tool_calls`` to drive a tool loop; ``content`` is set on the
|
|
74
|
+
terminal (non-tool) turn.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
content: Text content from the model, or None when the model emitted tool calls.
|
|
78
|
+
tool_calls: List of tool call objects from the model, or None on the terminal turn.
|
|
79
|
+
finish_reason: The stop reason reported by the provider (e.g. "tool_calls", "stop").
|
|
80
|
+
usage: Raw usage object from the LLM response (provider-dependent shape), or None.
|
|
81
|
+
cost_usd: Estimated cost in USD for this call via litellm price table, or None when
|
|
82
|
+
the provider is not in the table (local ONNX, claude-code CLI, etc.).
|
|
83
|
+
parsed_output: When ``response_format`` is passed alongside ``tools`` and the model
|
|
84
|
+
ends the turn with a plain (non-tool) response, the content parsed into the
|
|
85
|
+
``response_format`` schema. None when the turn emitted tool calls, when no
|
|
86
|
+
``response_format`` was requested, or when the content was not parseable.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
content: str | None
|
|
90
|
+
tool_calls: list[Any] | None
|
|
91
|
+
finish_reason: str | None
|
|
92
|
+
usage: Any | None = None
|
|
93
|
+
cost_usd: float | None = None
|
|
94
|
+
parsed_output: BaseModel | None = None
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class LiteLLMClientError(Exception):
|
|
98
|
+
"""Custom exception for LiteLLM client errors."""
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class StructuredOutputParseError(Exception):
|
|
102
|
+
"""Raised when a structured-output LLM call returns content that cannot be parsed.
|
|
103
|
+
|
|
104
|
+
Caught by the retry loop in ``_make_request`` so a malformed response
|
|
105
|
+
burns a retry attempt rather than silently returning unparsed content.
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class LLMHardTimeoutError(TimeoutError):
|
|
110
|
+
"""Raised when an LLM call exceeds the client-side wall-clock timeout."""
|