synkro 0.4.36__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.
Potentially problematic release.
This version of synkro might be problematic. Click here for more details.
- synkro/__init__.py +331 -0
- synkro/advanced.py +184 -0
- synkro/cli.py +156 -0
- synkro/core/__init__.py +7 -0
- synkro/core/checkpoint.py +250 -0
- synkro/core/dataset.py +432 -0
- synkro/core/policy.py +337 -0
- synkro/errors.py +178 -0
- synkro/examples/__init__.py +148 -0
- synkro/factory.py +291 -0
- synkro/formatters/__init__.py +18 -0
- synkro/formatters/chatml.py +121 -0
- synkro/formatters/langfuse.py +98 -0
- synkro/formatters/langsmith.py +98 -0
- synkro/formatters/qa.py +112 -0
- synkro/formatters/sft.py +90 -0
- synkro/formatters/tool_call.py +127 -0
- synkro/generation/__init__.py +9 -0
- synkro/generation/follow_ups.py +134 -0
- synkro/generation/generator.py +314 -0
- synkro/generation/golden_responses.py +269 -0
- synkro/generation/golden_scenarios.py +333 -0
- synkro/generation/golden_tool_responses.py +791 -0
- synkro/generation/logic_extractor.py +126 -0
- synkro/generation/multiturn_responses.py +177 -0
- synkro/generation/planner.py +131 -0
- synkro/generation/responses.py +189 -0
- synkro/generation/scenarios.py +90 -0
- synkro/generation/tool_responses.py +625 -0
- synkro/generation/tool_simulator.py +114 -0
- synkro/interactive/__init__.py +16 -0
- synkro/interactive/hitl_session.py +205 -0
- synkro/interactive/intent_classifier.py +94 -0
- synkro/interactive/logic_map_editor.py +176 -0
- synkro/interactive/rich_ui.py +459 -0
- synkro/interactive/scenario_editor.py +198 -0
- synkro/llm/__init__.py +7 -0
- synkro/llm/client.py +309 -0
- synkro/llm/rate_limits.py +99 -0
- synkro/models/__init__.py +50 -0
- synkro/models/anthropic.py +26 -0
- synkro/models/google.py +19 -0
- synkro/models/local.py +104 -0
- synkro/models/openai.py +31 -0
- synkro/modes/__init__.py +13 -0
- synkro/modes/config.py +66 -0
- synkro/modes/conversation.py +35 -0
- synkro/modes/tool_call.py +18 -0
- synkro/parsers.py +442 -0
- synkro/pipeline/__init__.py +20 -0
- synkro/pipeline/phases.py +592 -0
- synkro/pipeline/runner.py +769 -0
- synkro/pipelines.py +136 -0
- synkro/prompts/__init__.py +57 -0
- synkro/prompts/base.py +167 -0
- synkro/prompts/golden_templates.py +533 -0
- synkro/prompts/interactive_templates.py +198 -0
- synkro/prompts/multiturn_templates.py +156 -0
- synkro/prompts/templates.py +281 -0
- synkro/prompts/tool_templates.py +318 -0
- synkro/quality/__init__.py +14 -0
- synkro/quality/golden_refiner.py +163 -0
- synkro/quality/grader.py +153 -0
- synkro/quality/multiturn_grader.py +150 -0
- synkro/quality/refiner.py +137 -0
- synkro/quality/tool_grader.py +126 -0
- synkro/quality/tool_refiner.py +128 -0
- synkro/quality/verifier.py +228 -0
- synkro/reporting.py +464 -0
- synkro/schemas.py +521 -0
- synkro/types/__init__.py +43 -0
- synkro/types/core.py +153 -0
- synkro/types/dataset_type.py +33 -0
- synkro/types/logic_map.py +348 -0
- synkro/types/tool.py +94 -0
- synkro-0.4.36.data/data/examples/__init__.py +148 -0
- synkro-0.4.36.dist-info/METADATA +507 -0
- synkro-0.4.36.dist-info/RECORD +81 -0
- synkro-0.4.36.dist-info/WHEEL +4 -0
- synkro-0.4.36.dist-info/entry_points.txt +2 -0
- synkro-0.4.36.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Scenario generation from policy documents."""
|
|
2
|
+
|
|
3
|
+
from synkro.llm.client import LLM
|
|
4
|
+
from synkro.models import Model, OpenAI
|
|
5
|
+
from synkro.types.core import Scenario, Category
|
|
6
|
+
from synkro.prompts.templates import SCENARIO_GENERATOR_PROMPT, CATEGORY_SCENARIO_PROMPT
|
|
7
|
+
from synkro.schemas import ScenariosArray
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ScenarioGenerator:
|
|
11
|
+
"""
|
|
12
|
+
Generates realistic scenarios from policy documents.
|
|
13
|
+
|
|
14
|
+
Creates diverse scenarios that test different aspects of policy
|
|
15
|
+
understanding and compliance.
|
|
16
|
+
|
|
17
|
+
Examples:
|
|
18
|
+
>>> gen = ScenarioGenerator()
|
|
19
|
+
>>> scenarios = await gen.generate(policy.text, count=50)
|
|
20
|
+
>>> for s in scenarios:
|
|
21
|
+
... print(s.description)
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, llm: LLM | None = None, model: Model = OpenAI.GPT_4O_MINI):
|
|
25
|
+
"""
|
|
26
|
+
Initialize the scenario generator.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
llm: LLM client to use (creates one if not provided)
|
|
30
|
+
model: Model to use if creating LLM
|
|
31
|
+
"""
|
|
32
|
+
self.llm = llm or LLM(model=model)
|
|
33
|
+
self.prompt_template = SCENARIO_GENERATOR_PROMPT
|
|
34
|
+
|
|
35
|
+
async def generate(
|
|
36
|
+
self,
|
|
37
|
+
policy_text: str,
|
|
38
|
+
count: int,
|
|
39
|
+
category: Category | None = None,
|
|
40
|
+
) -> list[Scenario]:
|
|
41
|
+
"""
|
|
42
|
+
Generate scenarios from the policy.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
policy_text: The policy text
|
|
46
|
+
count: Number of scenarios to generate
|
|
47
|
+
category: Optional category to focus on
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
List of generated scenarios
|
|
51
|
+
"""
|
|
52
|
+
if category:
|
|
53
|
+
prompt = self._build_category_prompt(policy_text, count, category)
|
|
54
|
+
else:
|
|
55
|
+
prompt = self._build_general_prompt(policy_text, count)
|
|
56
|
+
|
|
57
|
+
# Use structured output for reliable scenario generation
|
|
58
|
+
parsed = await self.llm.generate_structured(prompt, ScenariosArray)
|
|
59
|
+
return [
|
|
60
|
+
Scenario(
|
|
61
|
+
description=s.scenario,
|
|
62
|
+
context=s.context,
|
|
63
|
+
category=category.name if category else None,
|
|
64
|
+
)
|
|
65
|
+
for s in parsed.scenarios[:count]
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
def _build_general_prompt(self, policy_text: str, count: int) -> str:
|
|
69
|
+
"""Build prompt for general scenario generation."""
|
|
70
|
+
return f"""{self.prompt_template}
|
|
71
|
+
|
|
72
|
+
POLICY:
|
|
73
|
+
{policy_text}
|
|
74
|
+
|
|
75
|
+
Generate exactly {count} diverse scenarios."""
|
|
76
|
+
|
|
77
|
+
def _build_category_prompt(
|
|
78
|
+
self, policy_text: str, count: int, category: Category
|
|
79
|
+
) -> str:
|
|
80
|
+
"""Build prompt for category-specific scenario generation."""
|
|
81
|
+
return f"""{CATEGORY_SCENARIO_PROMPT}
|
|
82
|
+
|
|
83
|
+
Category: {category.name}
|
|
84
|
+
Description: {category.description}
|
|
85
|
+
|
|
86
|
+
POLICY:
|
|
87
|
+
{policy_text}
|
|
88
|
+
|
|
89
|
+
Generate exactly {count} scenarios for the "{category.name}" category."""
|
|
90
|
+
|