Exemplo n.º 1
0
    async def inner(file_name: Path,
                    ignore_action_unlikely_intent: bool) -> Agent:
        config = textwrap.dedent(f"""
        version: "{LATEST_TRAINING_DATA_FORMAT_VERSION}"
        policies:
        - name: RulePolicy
          restrict_rules: false
        """)
        config_path = tmp_path / "config.yml"
        rasa.shared.utils.io.write_text_file(config, config_path)

        rule_file = tmp_path / "rules.yml"
        shutil.copy2(file_name, rule_file)
        training_data = rule_file.read_text()
        training_data_for_rules = training_data.replace("stories:", "rules:")
        training_data_for_rules = training_data_for_rules.replace(
            "story:", "rule:")
        rule_file.write_text(training_data_for_rules)

        model_path = await trained_async(moodbot_domain_path, str(config_path),
                                         str(rule_file))

        monkeypatch.setattr(
            RulePolicy,
            "_prediction_states",
            _custom_prediction_states_for_rules(ignore_action_unlikely_intent),
        )

        return Agent.load_local_model(model_path)
Exemplo n.º 2
0
async def form_bot_agent(trained_async, tmpdir_factory) -> Agent:
    zipped_model = await trained_async(
        domain="examples/formbot/domain.yml",
        config="examples/formbot/config.yml",
        training_files=["examples/formbot/data/stories.md"],
    )

    return Agent.load_local_model(zipped_model)
Exemplo n.º 3
0
async def response_selector_agent(trained_async: Callable) -> Agent:
    zipped_model = await trained_async(
        domain="examples/responseselectorbot/domain.yml",
        config="examples/responseselectorbot/config.yml",
        training_files=[
            "examples/responseselectorbot/data/rules.yml",
            "examples/responseselectorbot/data/stories.yml",
            "examples/responseselectorbot/data/nlu.yml",
        ],
    )

    return Agent.load_local_model(zipped_model)
Exemplo n.º 4
0
async def form_bot_agent(trained_async: Callable) -> Agent:
    endpoint = EndpointConfig("https://example.com/webhooks/actions")

    zipped_model = await trained_async(
        domain="examples/formbot/domain.yml",
        config="examples/formbot/config.yml",
        training_files=[
            "examples/formbot/data/rules.yml",
            "examples/formbot/data/stories.yml",
        ],
    )

    return Agent.load_local_model(zipped_model, action_endpoint=endpoint)
Exemplo n.º 5
0
async def test_end_to_evaluation_trips_circuit_breaker(
    e2e_story_file_trips_circuit_breaker_path: Text,
    trained_async: Callable,
    tmp_path: Path,
):
    config = textwrap.dedent(f"""
    version: '{LATEST_TRAINING_DATA_FORMAT_VERSION}'
    policies:
    - name: MemoizationPolicy
      max_history: 11

    pipeline: []
    """)
    config_path = tmp_path / "config.yml"
    rasa.shared.utils.io.write_text_file(config, config_path)

    model_path = await trained_async(
        "data/test_domains/default.yml",
        str(config_path),
        e2e_story_file_trips_circuit_breaker_path,
    )

    agent = Agent.load_local_model(model_path)
    generator = _create_data_generator(
        e2e_story_file_trips_circuit_breaker_path,
        agent,
        use_conversation_test_files=True,
    )
    test_stories = generator.generate_story_trackers()

    story_evaluation, num_stories, _ = await _collect_story_predictions(
        test_stories, agent)

    circuit_trip_predicted = [
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "utter_greet",
        "circuit breaker tripped",
        "circuit breaker tripped",
    ]

    assert (story_evaluation.evaluation_store.action_predictions ==
            circuit_trip_predicted)
    assert num_stories == 1
Exemplo n.º 6
0
async def _trained_default_agent(
    tmp_path_factory: TempPathFactory, stories_path: Text, trained_async: Callable
) -> Agent:
    project_path = tmp_path_factory.mktemp("project")

    config = textwrap.dedent(
        f"""
    version: "{LATEST_TRAINING_DATA_FORMAT_VERSION}"
    policies:
    - name: AugmentedMemoizationPolicy
      max_history: 3
    - name: RulePolicy
    """
    )
    config_path = project_path / "config.yml"
    rasa.shared.utils.io.write_text_file(config, config_path)
    model_path = await trained_async(
        "data/test_domains/default_with_slots.yml", str(config_path), [stories_path]
    )

    return Agent.load_local_model(model_path)
Exemplo n.º 7
0
async def e2e_bot_agent(e2e_bot: Optional[Path],) -> Agent:
    return Agent.load_local_model(e2e_bot)
Exemplo n.º 8
0
async def response_selector_agent(
    trained_response_selector_bot: Optional[Path],
) -> Agent:
    return Agent.load_local_model(trained_response_selector_bot)
Exemplo n.º 9
0
def mood_agent(trained_moodbot_path: Text) -> Agent:
    return Agent.load_local_model(model_path=trained_moodbot_path)
Exemplo n.º 10
0
async def form_bot_agent(trained_formbot: Text) -> Agent:
    endpoint = EndpointConfig("https://example.com/webhooks/actions")

    return Agent.load_local_model(trained_formbot, action_endpoint=endpoint)
Exemplo n.º 11
0
async def restaurantbot_agent(trained_restaurantbot: Optional[Path],) -> Agent:
    return Agent.load_local_model(trained_restaurantbot)
Exemplo n.º 12
0
async def test_predict_next_action_with_hidden_rules(trained_async: Callable,
                                                     tmp_path: Path):
    rule_intent = "rule_intent"
    rule_action = "rule_action"
    story_intent = "story_intent"
    story_action = "story_action"
    rule_slot = "rule_slot"
    story_slot = "story_slot"
    domain_content = textwrap.dedent(f"""
        version: "2.0"
        intents:
        - {rule_intent}
        - {story_intent}
        actions:
        - {rule_action}
        - {story_action}
        slots:
          {rule_slot}:
            type: text
          {story_slot}:
            type: text
        """)
    domain = Domain.from_yaml(domain_content)
    domain_path = tmp_path / "domain.yml"
    rasa.shared.utils.io.write_text_file(domain_content, domain_path)

    training_data = textwrap.dedent(f"""
    version: "{LATEST_TRAINING_DATA_FORMAT_VERSION}"

    rules:
    - rule: rule
      steps:
      - intent: {rule_intent}
      - action: {rule_action}
      - slot_was_set:
          - {rule_slot}: {rule_slot}

    stories:
    - story: story
      steps:
      - intent: {story_intent}
      - action: {story_action}
      - slot_was_set:
          - {story_slot}: {story_slot}
    """)
    training_data_path = tmp_path / "data.yml"
    rasa.shared.utils.io.write_text_file(training_data, training_data_path)

    config = textwrap.dedent(f"""
    version: "{LATEST_TRAINING_DATA_FORMAT_VERSION}"
    policies:
    - name: RulePolicy
    - name: MemoizationPolicy

    """)
    config_path = tmp_path / "config.yml"
    rasa.shared.utils.io.write_text_file(config, config_path)
    model_path = await trained_async(str(domain_path), str(config_path),
                                     [str(training_data_path)])
    agent = Agent.load_local_model(model_path)
    processor = agent.create_processor()

    tracker = DialogueStateTracker.from_events(
        "casd",
        evts=[
            ActionExecuted(ACTION_LISTEN_NAME),
            UserUttered(intent={"name": rule_intent}),
        ],
        slots=domain.slots,
    )
    action, prediction = processor.predict_next_action(tracker)
    assert action._name == rule_action
    assert prediction.hide_rule_turn

    processor._log_action_on_tracker(tracker, action,
                                     [SlotSet(rule_slot, rule_slot)],
                                     prediction)

    action, prediction = processor.predict_next_action(tracker)
    assert isinstance(action, ActionListen)
    assert prediction.hide_rule_turn

    processor._log_action_on_tracker(tracker, action, None, prediction)

    tracker.events.append(UserUttered(intent={"name": story_intent}))

    # rules are hidden correctly if memo policy predicts next actions correctly
    action, prediction = processor.predict_next_action(tracker)
    assert action._name == story_action
    assert not prediction.hide_rule_turn

    processor._log_action_on_tracker(tracker, action,
                                     [SlotSet(story_slot, story_slot)],
                                     prediction)

    action, prediction = processor.predict_next_action(tracker)
    assert isinstance(action, ActionListen)
    assert not prediction.hide_rule_turn
Exemplo n.º 13
0
async def restaurantbot_agent(trained_restaurantbot: Path) -> Agent:
    return Agent.load_local_model(str(trained_restaurantbot))
Exemplo n.º 14
0
import asyncio

import yaml
from rasa.core.agent import Agent
from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH
from rasa.utils.endpoints import EndpointConfig

# 需要先训练好一个模型
with open(DEFAULT_ENDPOINTS_PATH) as fp:
    endpoint = EndpointConfig.from_dict(yaml.load(fp).get("action_endpoint"))

agent = Agent.load_local_model(
    model_path="models",
    action_endpoint=endpoint
)

print(asyncio.run(agent.handle_text("rasax")))
print(asyncio.run(agent.handle_text("你是机器人吗?")))
print(asyncio.run(agent.handle_text("成都天气好吗?")))