ppt-web / src /landppt /services /runtime /ai_execution.py
26fwyzpz6f-max
Clean deploy without binary files
6aecb2e
Raw
History Blame Contribute Delete
2.93 kB
"""
Explicit execution context objects for provider-bound workflows.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Dict, Optional
@dataclass(frozen=True)
class ProviderConfig:
provider: str
model: Optional[str] = None
api_key: Optional[str] = None
base_url: Optional[str] = None
temperature: Optional[float] = None
max_tokens: Optional[int] = None
use_responses_api: bool = False
enable_reasoning: bool = False
reasoning_effort: str = "medium"
extras: Dict[str, Any] = field(default_factory=dict)
@classmethod
def from_mapping(cls, data: Dict[str, Any]) -> "ProviderConfig":
return cls(
provider=str(data.get("llm_provider") or data.get("provider") or "openai"),
model=data.get("llm_model") or data.get("model"),
api_key=data.get("api_key"),
base_url=data.get("base_url"),
temperature=data.get("temperature"),
max_tokens=data.get("max_tokens"),
use_responses_api=bool(data.get("use_responses_api")),
enable_reasoning=bool(data.get("enable_reasoning")),
reasoning_effort=str(data.get("reasoning_effort") or "medium"),
extras={
key: value
for key, value in data.items()
if key
not in {
"llm_provider",
"provider",
"llm_model",
"model",
"api_key",
"base_url",
"temperature",
"max_tokens",
"use_responses_api",
"enable_reasoning",
"reasoning_effort",
}
},
)
@dataclass(frozen=True)
class ExecutionContext:
role: str
provider: ProviderConfig
user_id: Optional[int] = None
source: str = "resolved"
@classmethod
def from_mapping(
cls,
role: str,
data: Dict[str, Any],
*,
user_id: Optional[int] = None,
source: str = "resolved",
) -> "ExecutionContext":
return cls(
role=role,
provider=ProviderConfig.from_mapping(data),
user_id=user_id,
source=source,
)
def to_processing_config_kwargs(self) -> Dict[str, Any]:
return {
"llm_model": self.provider.model,
"llm_provider": self.provider.provider,
"temperature": self.provider.temperature,
"max_tokens": self.provider.max_tokens,
"api_key": self.provider.api_key,
"base_url": self.provider.base_url,
"use_responses_api": self.provider.use_responses_api,
"enable_reasoning": self.provider.enable_reasoning,
"reasoning_effort": self.provider.reasoning_effort,
}