yaleh commited on
Commit
91e3db3
·
1 Parent(s): 07a9ce5

Added more groups of prompt template.

Browse files
Files changed (4) hide show
  1. app/config.py +16 -4
  2. app/gradio_meta_prompt.py +69 -50
  3. config.yml +1138 -1
  4. meta_prompt/meta_prompt.py +32 -10
app/config.py CHANGED
@@ -1,13 +1,21 @@
1
  # config.py
2
  from confz import BaseConfig
3
- from pydantic import BaseModel, Extra
4
- from typing import Optional
 
 
 
 
5
 
6
  class LLMConfig(BaseModel):
7
  type: str
8
 
9
  class Config:
10
- extra = Extra.allow
 
 
 
 
11
 
12
  class MetaPromptConfig(BaseConfig):
13
  llms: Optional[dict[str, LLMConfig]]
@@ -19,4 +27,8 @@ class MetaPromptConfig(BaseConfig):
19
  allow_flagging: Optional[bool] = False
20
  verbose: Optional[bool] = False
21
  max_output_age: Optional[int] = 3
22
- max_output_age_max: Optional[int] = 8
 
 
 
 
 
1
  # config.py
2
  from confz import BaseConfig
3
+ from pydantic import BaseModel
4
+ from typing import Optional, Dict, List
5
+
6
+ class RoleMessage(BaseModel):
7
+ role: str
8
+ message: str
9
 
10
  class LLMConfig(BaseModel):
11
  type: str
12
 
13
  class Config:
14
+ extra = 'allow'
15
+
16
+ class PromptGroup(BaseModel):
17
+ class Config:
18
+ extra = 'allow'
19
 
20
  class MetaPromptConfig(BaseConfig):
21
  llms: Optional[dict[str, LLMConfig]]
 
27
  allow_flagging: Optional[bool] = False
28
  verbose: Optional[bool] = False
29
  max_output_age: Optional[int] = 3
30
+ max_output_age_max: Optional[int] = 8
31
+ prompt_templates: Optional[Dict[str, Dict[str, List[RoleMessage]]]] = None
32
+
33
+ class Config:
34
+ extra = 'allow'
app/gradio_meta_prompt.py CHANGED
@@ -9,14 +9,36 @@ from gradio import CSVLogger, Button, utils
9
  from gradio.flagging import FlagMethod
10
  from gradio_client import utils as client_utils
11
  from confz import BaseConfig, CLArgSource, EnvSource, FileSource
12
- from app.config import MetaPromptConfig
13
  from langchain_core.language_models import BaseLanguageModel
14
  from langchain_core.prompts import ChatPromptTemplate
15
  from langchain_openai import ChatOpenAI
16
  from meta_prompt import *
17
  from pythonjsonlogger import jsonlogger
18
  import pprint
 
 
 
 
 
 
 
 
 
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  class SimplifiedCSVLogger(CSVLogger):
22
  """
@@ -260,7 +282,11 @@ def evaluate_system_message(system_message, user_message,
260
  raise gr.Error(f"Error: {e}")
261
 
262
 
263
- def process_message(user_message, expected_output, acceptance_criteria, initial_system_message, recursion_limit: int, max_output_age: int, llms: Union[BaseLanguageModel, Dict[str, BaseLanguageModel]]):
 
 
 
 
264
  """
265
  Process a user message by executing the MetaPromptGraph with provided language models and input state.
266
  This function sets up the initial state of the conversation, logs the execution if verbose mode is enabled,
@@ -298,7 +324,11 @@ def process_message(user_message, expected_output, acceptance_criteria, initial_
298
  '%(asctime)s %(name)s %(levelname)s %(message)s'))
299
  logger.addHandler(log_handler)
300
 
301
- meta_prompt_graph = MetaPromptGraph(llms=llms, verbose=config.verbose, logger=logger)
 
 
 
 
302
  try:
303
  output_state = meta_prompt_graph(input_state, recursion_limit=recursion_limit)
304
  except Exception as e:
@@ -360,19 +390,22 @@ def initialize_llm(model_name: str, model_config: Optional[Dict[str, Any]] = Non
360
  raise NotImplementedError(f"Unrecognized type configured for the language model: {model_type}")
361
 
362
 
363
- def process_message_with_single_llm(user_message, expected_output, acceptance_criteria, initial_system_message,
 
364
  recursion_limit: int, max_output_age: int,
365
- model_name: str):
366
  """
367
  Process a user message using a single language model.
368
 
369
- This function initializes the specified language model and then uses it to process the user's
370
- message along with other provided input parameters such as expected output, acceptance criteria,
371
- initial system message, recursion limit, and max output age. The result is obtained by calling
372
- the `process_message` function with this single language model.
 
 
373
 
374
- Args:
375
- user_message (str): The user's input message to be processed by the language model(s).
376
  expected_output (str): The anticipated response or outcome from the language model based on the user's message.
377
  acceptance_criteria (str): Criteria that determines whether the output is acceptable or not.
378
  initial_system_message (str): Initial instruction given to the language model before processing the user's message.
@@ -380,6 +413,7 @@ def process_message_with_single_llm(user_message, expected_output, acceptance_cr
380
  max_output_age (int): The maximum age of output messages that should be considered in the conversation history.
381
  model_name (str): The name of the language model to initialize and use for processing the user's message.
382
  This should correspond to a key in the 'llms' section of the application's configuration.
 
383
 
384
  Returns:
385
  tuple: A tuple containing the best system message, output, analysis, and chat log in JSON format.
@@ -390,12 +424,14 @@ def process_message_with_single_llm(user_message, expected_output, acceptance_cr
390
  """
391
  llm = initialize_llm(model_name)
392
  return process_message(user_message, expected_output, acceptance_criteria, initial_system_message,
393
- recursion_limit, max_output_age, llm)
394
 
395
 
396
- def process_message_with_2_llms(user_message, expected_output, acceptance_criteria, initial_system_message,
 
397
  recursion_limit: int, max_output_age: int,
398
- optimizer_model_name: str, executor_model_name: str):
 
399
  """
400
  Process a user message using two language models - one for optimization and another for execution.
401
 
@@ -416,6 +452,7 @@ def process_message_with_2_llms(user_message, expected_output, acceptance_criter
416
  This should correspond to a key in the 'llms' section of the application's configuration.
417
  executor_model_name (str): The name of the language model to initialize and use for execution tasks like running code or providing final outputs.
418
  This should correspond to a key in the 'llms' section of the application's configuration.
 
419
 
420
  Returns:
421
  tuple: A tuple containing the best system message, output, analysis, and chat log in JSON format.
@@ -435,46 +472,20 @@ def process_message_with_2_llms(user_message, expected_output, acceptance_criter
435
  NODE_PROMPT_SUGGESTER: optimizer_model
436
  }
437
  return process_message(user_message, expected_output, acceptance_criteria, initial_system_message,
438
- recursion_limit, max_output_age, llms)
439
 
440
 
441
- def process_message_with_expert_llms(user_message, expected_output, acceptance_criteria, initial_system_message,
 
442
  recursion_limit: int, max_output_age: int,
443
  initial_developer_model_name: str, initial_developer_temperature: float,
444
  developer_model_name: str, developer_temperature: float,
445
  executor_model_name: str, executor_temperature: float,
446
  output_history_analyzer_model_name: str, output_history_analyzer_temperature: float,
447
  analyzer_model_name: str, analyzer_temperature: float,
448
- suggester_model_name: str, suggester_temperature: float):
449
- """
450
- Process a user message using multiple expert language models.
451
-
452
- This function initializes six expert language models based on their names and uses them to process the user's message
453
- along with other provided input parameters such as expected output, acceptance criteria, initial system message,
454
- recursion limit, and max output age. The result is obtained by calling the `process_message` function with a dictionary
455
- of language models where each node uses a specific language model.
456
-
457
- Args:
458
- user_message (str): The user's input message to be processed by the language models.
459
- expected_output (str): The anticipated response or outcome from the language models based on the user's message.
460
- acceptance_criteria (str): Criteria that determines whether the output is acceptable or not.
461
- initial_system_message (str): Initial instruction given to the language models before processing the user's message.
462
- recursion_limit (int): The maximum number of times the MetaPromptGraph can call itself recursively.
463
- max_output_age (int): The maximum age of output messages that should be considered in the conversation history.
464
- initial_developer_model_name (str): The name of the language model to initialize and use for the initial developer node.
465
- developer_model_name (str): The name of the language model to initialize and use for the developer node.
466
- executor_model_name (str): The name of the language model to initialize and use for the executor node.
467
- output_history_analyzer_model_name (str): The name of the language model to initialize and use for the output history analyzer node.
468
- analyzer_model_name (str): The name of the language model to initialize and use for the analyzer node.
469
- suggester_model_name (str): The name of the language model to initialize and use for the suggester node.
470
 
471
- Returns:
472
- tuple: A tuple containing the best system message, output, analysis, and chat log in JSON format.
473
- - best_system_message (str): The system message that resulted in the most appropriate response based on the acceptance criteria.
474
- - best_output (str): The output generated by the language models that best meets the expected outcome and acceptance criteria.
475
- - analysis (str): An analysis of how well the generated output matches the expected output and acceptance criteria.
476
- - chat_log (list): A list containing JSON objects representing the conversation log, with each object containing a timestamp, logger name, levelname, and message.
477
- """
478
  llms = {
479
  NODE_PROMPT_INITIAL_DEVELOPER: initialize_llm(initial_developer_model_name, {"temperature": initial_developer_temperature}),
480
  NODE_PROMPT_DEVELOPER: initialize_llm(developer_model_name, {"temperature": developer_temperature}),
@@ -484,7 +495,7 @@ def process_message_with_expert_llms(user_message, expected_output, acceptance_c
484
  NODE_PROMPT_SUGGESTER: initialize_llm(suggester_model_name, {"temperature": suggester_temperature})
485
  }
486
  return process_message(user_message, expected_output, acceptance_criteria, initial_system_message,
487
- recursion_limit, max_output_age, llms)
488
 
489
 
490
  class FileConfig(BaseConfig):
@@ -520,7 +531,7 @@ with gr.Blocks(title='Meta Prompt') as demo:
520
  expected_output_input = gr.Textbox(
521
  label="Expected Output", show_copy_button=True)
522
  acceptance_criteria_input = gr.Textbox(
523
- label="Acceptance Criteria", show_copy_button=True)
524
  initial_system_message_input = gr.Textbox(
525
  label="Initial System Message", show_copy_button=True, value="")
526
  evaluate_initial_system_message_button = gr.Button(
@@ -531,6 +542,11 @@ with gr.Blocks(title='Meta Prompt') as demo:
531
  max_output_age = gr.Number(
532
  label="Max Output Age", value=config.max_output_age,
533
  precision=0, minimum=1, maximum=config.max_output_age_max, step=1)
 
 
 
 
 
534
  with gr.Row():
535
  with gr.Tabs():
536
  with gr.Tab('Simple') as simple_llm_tab:
@@ -713,7 +729,8 @@ with gr.Blocks(title='Meta Prompt') as demo:
713
  initial_system_message_input,
714
  recursion_limit_input,
715
  max_output_age,
716
- simple_model_name_input
 
717
  ],
718
  outputs=[
719
  system_message_output,
@@ -733,7 +750,8 @@ with gr.Blocks(title='Meta Prompt') as demo:
733
  recursion_limit_input,
734
  max_output_age,
735
  advanced_optimizer_model_name_input,
736
- advanced_executor_model_name_input
 
737
  ],
738
  outputs=[
739
  system_message_output,
@@ -757,7 +775,8 @@ with gr.Blocks(title='Meta Prompt') as demo:
757
  expert_prompt_executor_model_name_input, expert_prompt_executor_temperature_input,
758
  expert_output_history_analyzer_model_name_input, expert_output_history_analyzer_temperature_input,
759
  expert_prompt_analyzer_model_name_input, expert_prompt_analyzer_temperature_input,
760
- expert_prompt_suggester_model_name_input, expert_prompt_suggester_temperature_input
 
761
  ],
762
  outputs=[
763
  system_message_output,
 
9
  from gradio.flagging import FlagMethod
10
  from gradio_client import utils as client_utils
11
  from confz import BaseConfig, CLArgSource, EnvSource, FileSource
12
+ from app.config import MetaPromptConfig, RoleMessage
13
  from langchain_core.language_models import BaseLanguageModel
14
  from langchain_core.prompts import ChatPromptTemplate
15
  from langchain_openai import ChatOpenAI
16
  from meta_prompt import *
17
  from pythonjsonlogger import jsonlogger
18
  import pprint
19
+ from langchain_core.prompts import ChatPromptTemplate
20
+ from typing import Optional, Dict, List
21
+
22
+ def prompt_templates_confz2langchain(prompt_templates: Dict[str, Dict[str, List[RoleMessage]]]) -> Dict[str, ChatPromptTemplate]:
23
+ """
24
+ Convert a dictionary of prompt templates from the configuration format to the language chain format.
25
+
26
+ This function takes a dictionary of prompt templates in the configuration format and converts them to the language chain format.
27
+ Each prompt template is converted to a ChatPromptTemplate object, which is then stored in a new dictionary with the same keys.
28
 
29
+ Args:
30
+ prompt_templates (Dict[str, Dict[str, List[RoleMessage]]]): A dictionary of prompt templates in the configuration format.
31
+
32
+ Returns:
33
+ Dict[str, ChatPromptTemplate]: A dictionary of prompt templates in the language chain format.
34
+ """
35
+ return {
36
+ node: ChatPromptTemplate.from_messages([
37
+ (role_message.role, role_message.message)
38
+ for role_message in role_messages
39
+ ])
40
+ for node, role_messages in prompt_templates.items()
41
+ }
42
 
43
  class SimplifiedCSVLogger(CSVLogger):
44
  """
 
282
  raise gr.Error(f"Error: {e}")
283
 
284
 
285
+ def process_message(user_message: str, expected_output: str,
286
+ acceptance_criteria: str, initial_system_message: str,
287
+ recursion_limit: int, max_output_age: int,
288
+ llms: Union[BaseLanguageModel, Dict[str, BaseLanguageModel]],
289
+ prompt_template_group: Optional[str] = None) -> tuple:
290
  """
291
  Process a user message by executing the MetaPromptGraph with provided language models and input state.
292
  This function sets up the initial state of the conversation, logs the execution if verbose mode is enabled,
 
324
  '%(asctime)s %(name)s %(levelname)s %(message)s'))
325
  logger.addHandler(log_handler)
326
 
327
+ if prompt_template_group is None:
328
+ prompt_template_group = 'default'
329
+ prompt_templates = prompt_templates_confz2langchain(config.prompt_templates[prompt_template_group])
330
+ meta_prompt_graph = MetaPromptGraph(llms=llms, prompts=prompt_templates,
331
+ verbose=config.verbose, logger=logger)
332
  try:
333
  output_state = meta_prompt_graph(input_state, recursion_limit=recursion_limit)
334
  except Exception as e:
 
390
  raise NotImplementedError(f"Unrecognized type configured for the language model: {model_type}")
391
 
392
 
393
+ def process_message_with_single_llm(user_message: str, expected_output: str,
394
+ acceptance_criteria: str, initial_system_message: str,
395
  recursion_limit: int, max_output_age: int,
396
+ model_name: str, prompt_template_group: Optional[str] = None) -> tuple:
397
  """
398
  Process a user message using a single language model.
399
 
400
+ This function initializes a language model based on the provided model name and
401
+ uses it to process the user's message. The function takes in additional parameters
402
+ such as the user's message, expected output, acceptance criteria, initial system
403
+ message, recursion limit, and max output age. It then calls the `process_message`
404
+ function with the initialized language model to obtain the best system message,
405
+ output, analysis, and chat log.
406
 
407
+ Parameters:
408
+ user_message (str): The user's input message to be processed by the language model.
409
  expected_output (str): The anticipated response or outcome from the language model based on the user's message.
410
  acceptance_criteria (str): Criteria that determines whether the output is acceptable or not.
411
  initial_system_message (str): Initial instruction given to the language model before processing the user's message.
 
413
  max_output_age (int): The maximum age of output messages that should be considered in the conversation history.
414
  model_name (str): The name of the language model to initialize and use for processing the user's message.
415
  This should correspond to a key in the 'llms' section of the application's configuration.
416
+ prompt_template_group (Optional[str], optional): The name of the prompt template group to use for processing the user's message. Defaults to None.
417
 
418
  Returns:
419
  tuple: A tuple containing the best system message, output, analysis, and chat log in JSON format.
 
424
  """
425
  llm = initialize_llm(model_name)
426
  return process_message(user_message, expected_output, acceptance_criteria, initial_system_message,
427
+ recursion_limit, max_output_age, llm, prompt_template_group)
428
 
429
 
430
+ def process_message_with_2_llms(user_message: str, expected_output: str,
431
+ acceptance_criteria: str, initial_system_message: str,
432
  recursion_limit: int, max_output_age: int,
433
+ optimizer_model_name: str, executor_model_name: str,
434
+ prompt_template_group: Optional[str] = None) -> tuple:
435
  """
436
  Process a user message using two language models - one for optimization and another for execution.
437
 
 
452
  This should correspond to a key in the 'llms' section of the application's configuration.
453
  executor_model_name (str): The name of the language model to initialize and use for execution tasks like running code or providing final outputs.
454
  This should correspond to a key in the 'llms' section of the application's configuration.
455
+ prompt_template_group (Optional[str], optional): The name of the prompt template group to use for processing the user's message. Defaults to None.
456
 
457
  Returns:
458
  tuple: A tuple containing the best system message, output, analysis, and chat log in JSON format.
 
472
  NODE_PROMPT_SUGGESTER: optimizer_model
473
  }
474
  return process_message(user_message, expected_output, acceptance_criteria, initial_system_message,
475
+ recursion_limit, max_output_age, llms, prompt_template_group)
476
 
477
 
478
+ def process_message_with_expert_llms(user_message: str, expected_output: str,
479
+ acceptance_criteria: str, initial_system_message: str,
480
  recursion_limit: int, max_output_age: int,
481
  initial_developer_model_name: str, initial_developer_temperature: float,
482
  developer_model_name: str, developer_temperature: float,
483
  executor_model_name: str, executor_temperature: float,
484
  output_history_analyzer_model_name: str, output_history_analyzer_temperature: float,
485
  analyzer_model_name: str, analyzer_temperature: float,
486
+ suggester_model_name: str, suggester_temperature: float,
487
+ prompt_template_group: Optional[str] = None) -> tuple:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488
 
 
 
 
 
 
 
 
489
  llms = {
490
  NODE_PROMPT_INITIAL_DEVELOPER: initialize_llm(initial_developer_model_name, {"temperature": initial_developer_temperature}),
491
  NODE_PROMPT_DEVELOPER: initialize_llm(developer_model_name, {"temperature": developer_temperature}),
 
495
  NODE_PROMPT_SUGGESTER: initialize_llm(suggester_model_name, {"temperature": suggester_temperature})
496
  }
497
  return process_message(user_message, expected_output, acceptance_criteria, initial_system_message,
498
+ recursion_limit, max_output_age, llms, prompt_template_group=prompt_template_group)
499
 
500
 
501
  class FileConfig(BaseConfig):
 
531
  expected_output_input = gr.Textbox(
532
  label="Expected Output", show_copy_button=True)
533
  acceptance_criteria_input = gr.Textbox(
534
+ label="Acceptance Criteria (Compared with Expected Output [EO])", show_copy_button=True)
535
  initial_system_message_input = gr.Textbox(
536
  label="Initial System Message", show_copy_button=True, value="")
537
  evaluate_initial_system_message_button = gr.Button(
 
542
  max_output_age = gr.Number(
543
  label="Max Output Age", value=config.max_output_age,
544
  precision=0, minimum=1, maximum=config.max_output_age_max, step=1)
545
+ prompt_template_group = gr.Dropdown(
546
+ label="Prompt Template Group",
547
+ choices=list(config.prompt_templates.keys()),
548
+ value=list(config.prompt_templates.keys())[0],
549
+ )
550
  with gr.Row():
551
  with gr.Tabs():
552
  with gr.Tab('Simple') as simple_llm_tab:
 
729
  initial_system_message_input,
730
  recursion_limit_input,
731
  max_output_age,
732
+ simple_model_name_input,
733
+ prompt_template_group
734
  ],
735
  outputs=[
736
  system_message_output,
 
750
  recursion_limit_input,
751
  max_output_age,
752
  advanced_optimizer_model_name_input,
753
+ advanced_executor_model_name_input,
754
+ prompt_template_group
755
  ],
756
  outputs=[
757
  system_message_output,
 
775
  expert_prompt_executor_model_name_input, expert_prompt_executor_temperature_input,
776
  expert_output_history_analyzer_model_name_input, expert_output_history_analyzer_temperature_input,
777
  expert_prompt_analyzer_model_name_input, expert_prompt_analyzer_temperature_input,
778
+ expert_prompt_suggester_model_name_input, expert_prompt_suggester_temperature_input,
779
+ prompt_template_group
780
  ],
781
  outputs=[
782
  system_message_output,
config.yml CHANGED
@@ -81,4 +81,1141 @@ recursion_limit: 16
81
  recursion_limit_max: 20
82
  max_output_age: 2
83
  allow_flagging: false
84
- # verbose: false
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  recursion_limit_max: 20
82
  max_output_age: 2
83
  allow_flagging: false
84
+ # verbose: false
85
+
86
+ prompt_templates:
87
+ default:
88
+ prompt_initial_developer:
89
+ - role: system
90
+ message: |
91
+ # Expert Prompt Engineer
92
+
93
+ You are an expert prompt engineer tasked with creating system messages for AI assistants.
94
+
95
+ ## Instructions
96
+
97
+ 1. Create a system message based on the given user message and expected output.
98
+ 2. Ensure the system message can handle similar user messages.
99
+ 3. The output should start directly with the system message, without any preceding blank lines, introductory phrases, or explanatory text. Do not include extra lines at the beginning or end of the output.
100
+ 4. Expected Output text should not appear in System Message as an example. But it's OK to use some similar text as an example instead.
101
+ 5. In the System Message, do not use `Expected Output` to refer to the example you want to illustrate. Instead, directly describe the specific features you need.
102
+ 6. Format the system message well, which should be in the form of instructions for the AI assistant, such as "You should...". Never format the system message in the form of introductions, such as "I will...".
103
+
104
+ ## Output
105
+
106
+ Provide only the system message, adhering to the above guidelines.
107
+ - role: human
108
+ message: |
109
+ # User Message
110
+
111
+ {user_message}
112
+
113
+ # Expected Output
114
+
115
+ {expected_output}
116
+
117
+ # System Message
118
+
119
+ prompt_developer:
120
+ - role: system
121
+ message: |
122
+ # Expert Prompt Engineer
123
+
124
+ You are an expert prompt engineer tasked with updating system messages for AI assistants. You Update System Message according to Suggestions, to improve Output and match Expected Output more closely.
125
+
126
+ ## Instructions
127
+
128
+ 1. Update the system message based on the given Suggestion, User Message, and Expected Output.
129
+ 2. Ensure the updated system message can handle similar user messages.
130
+ 3. Modify only the content mentioned in the Suggestion. Do not change the parts that are not related to the Suggestion.
131
+ 4. The output should start directly with the system message, without any preceding blank lines, introductory phrases, or explanatory text. Do not include extra lines at the beginning or end of the output.
132
+ 5. Avoiding the behavior should be explicitly requested (e.g. `Don't ...`) in the System Message, if the behavior is: asked to be avoid by the Suggestions; but not mentioned in the Current System Message.
133
+ 6. Expected Output text should not appear in System Message as an example. But it's OK to use some similar text as an example instead.
134
+ 7. In the System Message, do not use `Expected Output` to refer to the example you want to illustrate. Instead, directly describe the specific features you need.
135
+ 8. Remove the Expected Output text or text highly similar to Expected Output from System Message, if it's present.
136
+ 9. Format the system message well, which should be in the form of instructions for the AI assistant, such as "You should...". Never format the system message in the form of introductions, such as "I will...".
137
+
138
+ ## Output
139
+
140
+ Provide only the updated System Message, adhering to the above guidelines.
141
+ - role: human
142
+ message: |
143
+ # Current System Message
144
+
145
+ {system_message}
146
+
147
+ # User Message
148
+
149
+ {user_message}
150
+
151
+ # Expected Output
152
+
153
+ {expected_output}
154
+
155
+ # Suggestions
156
+
157
+ {suggestions}
158
+
159
+ # Updated System Message
160
+
161
+ prompt_executor:
162
+ - role: system
163
+ message: "{system_message}"
164
+ - role: human
165
+ message: "{user_message}"
166
+
167
+ output_history_analyzer:
168
+ - role: system
169
+ message: |
170
+ You are a text comparing program. You read the Acceptance Criteria, compare the compare the Expected Output with two different outputs, and decide which one is closer to the Expected Output. When comparing the outputs, ignore the differences which are acceptable or ignorable according to the Acceptance Criteria.
171
+
172
+ You output the following analysis according to the Acceptance Criteria:
173
+
174
+ * Your analysis in a Markdown list.
175
+ * Indicates an output ID that is closer to the Expected Output, in the following format:
176
+
177
+ ```
178
+ # Analysis
179
+
180
+ ...
181
+
182
+ # Output ID closer to Expected Output: [ID]
183
+ ```
184
+
185
+ You must choose one of the two outputs. If both outputs are exactly the same, output the following:
186
+
187
+ ```
188
+ # Analysis
189
+
190
+ ...
191
+
192
+ # Draw
193
+ ```
194
+ - role: human
195
+ message: |
196
+ # Output ID: A
197
+
198
+ ```
199
+ {best_output}
200
+ ```
201
+
202
+ # Output ID: B
203
+
204
+ ```
205
+ {output}
206
+ ```
207
+
208
+ # Acceptance Criteria
209
+
210
+ Compared with Expected Output [EO]:
211
+ {acceptance_criteria}
212
+
213
+ # Expected Output
214
+
215
+ ```
216
+ {expected_output}
217
+ ```
218
+
219
+ prompt_analyzer:
220
+ - role: system
221
+ message: |
222
+ You are a text comparing program. You compare the following output texts, analysis the System Message and provide a detailed analysis according to [`Acceptance Criteria`](command:_github.copilot.openSymbolFromReferences?%5B%22Acceptance%20Criteria%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A85%2C%22character%22%3A80%7D%7D%5D%5D "Go to definition"). Then you decide whether [`Actual Output`](command:_github.copilot.openSymbolFromReferences?%5B%22Actual%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") is acceptable.
223
+
224
+ Provide your analysis in the following format:
225
+
226
+ ```
227
+ - Acceptable Differences: [List acceptable differences succinctly]
228
+ - Unacceptable Differences: [List unacceptable differences succinctly]
229
+ - Accept: [Yes/No]
230
+ ```
231
+
232
+ * Compare Expected Output and Actual Output with the guidance of Accept Criteria.
233
+ * Only set 'Accept' to 'Yes', if Accept Criteria are all met. Otherwise, set 'Accept' to 'No'.
234
+ * List only the acceptable differences according to Accept Criteria in 'acceptable Differences' section.
235
+ * List only the unacceptable differences according to Accept Criteria in 'Unacceptable Differences' section.
236
+
237
+ # Acceptance Criteria
238
+
239
+ Compared with Expected Output [EO]:
240
+ ```
241
+ {acceptance_criteria}
242
+ ```
243
+ - role: human
244
+ message: |
245
+ # System Message
246
+
247
+ ```
248
+ {system_message}
249
+ ```
250
+
251
+ # Expected Output
252
+
253
+ ```
254
+ {expected_output}
255
+ ```
256
+
257
+ # Actual Output
258
+
259
+ ```
260
+ {output}
261
+ ```
262
+
263
+ prompt_suggester:
264
+ - role: system
265
+ message: |
266
+ Read the following inputs and outputs of an LLM prompt, and also analysis about them. Then suggest how to improve System Message.
267
+
268
+ * The goal is to improve the System Message to match the Expected Output better.
269
+ * Ignore all Acceptable Differences and focus on Unacceptable Differences.
270
+ * Suggest formal changes first, then semantic changes.
271
+ * Provide your suggestions in a Markdown list, nothing else. Output only the suggestions related with Unacceptable Differences.
272
+ * Start every suggestion with [`The System Message should ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A26%2C%22character%22%3A139%7D%7D%5D%5D "Go to definition").
273
+ * Figue out the contexts of the System Message that conflict with the suggestions, and suggest modification or deletion.
274
+ * While the Expected Output won't be shown to the prompt developer who will read your suggestions, do not simply describe the output as being the same/similar/different from the Expected Output, such as [`the output should not use a different format and style compared to the Expected Output`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20not%20use%20a%20different%20format%20and%20style%20compared%20to%20the%20Expected%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") or [`the output should match the expected output exactly`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20match%20the%20expected%20output%20exactly%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A100%2C%22character%22%3A60%7D%7D%5D%5D "Go to definition"); instead, describe the expected characteristics specifically and suggest a detailed example.
275
+ * Avoiding the behavior should be explicitly requested (e.g. [`The System Message should explicitly state that the output shoud not ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20explicitly%20state%20that%20the%20output%20shoud%20not%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A53%2C%22character%22%3A58%7D%7D%5D%5D "Go to definition")) in the System Message, if the behavior is: asked to be removed by the Suggestions; appeared in the Actual Output; but not mentioned in the Current System Message.
276
+ * Expected Output text should not appear in System Message as an example. But it's OK to use some similar but distinct text as an example instead.
277
+ * Ask to remove the Expected Output text or text highly similar to Expected Output from System Message, if it's present.
278
+ * Provide format examples (but don't use Expected Output text as the example) or detected format name, if System Message does not.
279
+ * Specify the detected format name (e.g. XML, JSON, etc.) of Expected Output, if System Message does not mention it.
280
+ - role: human
281
+ message: |
282
+ <|Start_System_Message|>
283
+ {system_message}
284
+ <|End_System_Message|>
285
+
286
+ <|Start_User_Message|>
287
+ {user_message}
288
+ <|End_User_Message|>
289
+
290
+ <|Start_Expected_Output|>
291
+ {expected_output}
292
+ <|End_Expected_Output|>
293
+
294
+ <|Start_Actual_Output|>
295
+ {output}
296
+ <|End_Actual_Output|>
297
+
298
+ <|Start_Acceptance Criteria|>
299
+ Compared with Expected Output [EO]:
300
+ {acceptance_criteria}
301
+ <|End_Acceptance Criteria|>
302
+
303
+ <|Start_Analysis|>
304
+ {analysis}
305
+ <|End_Analysis|>
306
+ gpt:
307
+ prompt_initial_developer:
308
+ - role: system
309
+ message: |
310
+ You are an expert in designing system instructions for language models. Your task is to generate a System Message for an LLM assistant. The System Message should clearly define the assistant's role, the expected format of responses, and any specific guidelines relevant to the task type.
311
+
312
+ The pair of `User Message` and `Expected Output` (assistant message) is a specific example of the task type. Use them to inform your instructions.
313
+
314
+ Based on the specific example, create a System Message that includes the following components:
315
+
316
+ 1. **Role Definition:** Describe the assistant's role in this task. What is the assistant expected to achieve? Specify the primary objective or purpose, and how the assistant should approach the task.
317
+
318
+ 2. **Response Format:** Define the format and style of responses that the assistant should follow. Detail the structure, tone, and any specific language or phrases that should be used.
319
+
320
+ 3. **Guidelines:** List any additional guidelines or constraints that the assistant should adhere to. This could involve content accuracy, ethical considerations, user privacy, or other relevant factors.
321
+
322
+ 4. **Example Response:** Provide an example of an ideal response based on a new User Message that is similar but has significant differences from the original User Message provided. Ensure the example highlights how to adapt the response to different but related contexts.
323
+
324
+ Ensure the System Message is comprehensive, clear, and directly relevant to guiding the assistant's performance.
325
+
326
+ **Example Output:**
327
+
328
+ ---
329
+
330
+ **System Message:**
331
+
332
+ **Role Definition:**
333
+ You are an assistant designed to help users with [specific task]. Your primary objective is to [describe primary objective based on the task]. Approach each query with [specific approach, e.g., thoroughness, creativity, efficiency].
334
+
335
+ **Response Format:**
336
+ - Structure your responses clearly and logically.
337
+ - Use a professional and friendly tone.
338
+ - Include [specific elements, phrases, or keywords] as needed.
339
+ - Ensure responses are [concise, detailed, or any other relevant style guidance].
340
+
341
+ **Guidelines:**
342
+ - Always verify the accuracy of the information provided.
343
+ - Adhere to the principles of [specific guidelines, such as ethical considerations, user privacy, etc.].
344
+ - Tailor your responses to the user's level of expertise and familiarity with the topic.
345
+
346
+ **Example Response:**
347
+ ```
348
+ [Provide an example of an ideal response based on a new User Message that is similar but has significant differences from the original User Message provided. Ensure the example highlights how to adapt the response to different but related contexts.]
349
+ ```
350
+ - role: human
351
+ message: |
352
+ # User Message
353
+
354
+ {user_message}
355
+
356
+ # Expected Output
357
+
358
+ {expected_output}
359
+
360
+ # System Message
361
+
362
+ prompt_developer:
363
+ - role: system
364
+ message: |
365
+ You are an expert in designing system instructions for language models. Your task is to update a System Message for an LLM assistant. The System Message should clearly define the assistant's role, the expected format of responses, and any specific guidelines relevant to the task type.
366
+
367
+ The user will provide you a specific example (`User Message` and `Expected Output`) of the task type, `Current System Message` and `Suggestions` to update the System Message. Based on these inputs, update the System Message that includes the following components:
368
+
369
+ 1. **Role Definition:** Describe the assistant's role in this task. What is the assistant expected to achieve? Specify the primary objective or purpose, and how the assistant should approach the task.
370
+
371
+ 2. **Response Format:** Define the format and style of responses that the assistant should follow. Detail the structure, tone, and any specific language or phrases that should be used.
372
+
373
+ 3. **Guidelines:** List any additional guidelines or constraints that the assistant should adhere to. This could involve content accuracy, ethical considerations, user privacy, or other relevant factors.
374
+
375
+ 4. **Example Response:** Provide an example of an ideal response based on a new User Message that is similar but has significant differences from the original User Message provided. Ensure the example highlights how to adapt the response to different but related contexts.
376
+
377
+ Ensure the System Message is comprehensive, clear, and directly relevant to guiding the assistant's performance.
378
+
379
+ * Modify only the content mentioned in the Suggestion. Do not change the parts that are not related to the Suggestion.
380
+ * Avoiding the behavior should be explicitly requested (e.g. `Don't ...`) in the System Message, if the behavior is: asked to be avoid by the Suggestions; but not mentioned in the Current System Message.
381
+
382
+ **Example Output:**
383
+
384
+ ---
385
+
386
+ **System Message:**
387
+
388
+ **Role Definition:**
389
+ You are an assistant designed to help users with [specific task]. Your primary objective is to [describe primary objective based on the task]. Approach each query with [specific approach, e.g., thoroughness, creativity, efficiency].
390
+
391
+ **Response Format:**
392
+ - Structure your responses clearly and logically.
393
+ - Use a professional and friendly tone.
394
+ - Include [specific elements, phrases, or keywords] as needed.
395
+ - Ensure responses are [concise, detailed, or any other relevant style guidance].
396
+
397
+ **Guidelines:**
398
+ - Always verify the accuracy of the information provided.
399
+ - Adhere to the principles of [specific guidelines, such as ethical considerations, user privacy, etc.].
400
+ - Tailor your responses to the user's level of expertise and familiarity with the topic.
401
+
402
+ **Example Response:**
403
+ ```
404
+ [Provide an example of an ideal response based on a new User Message that is similar but has significant differences from the original User Message provided. Ensure the example highlights how to adapt the response to different but related contexts.]
405
+ ```
406
+ - role: human
407
+ message: |
408
+ # Current System Message
409
+
410
+ {system_message}
411
+
412
+ # User Message
413
+
414
+ {user_message}
415
+
416
+ # Expected Output
417
+
418
+ {expected_output}
419
+
420
+ # Suggestions
421
+
422
+ {suggestions}
423
+
424
+ # Updated System Message
425
+
426
+ prompt_executor:
427
+ - role: system
428
+ message: "{system_message}"
429
+ - role: human
430
+ message: "{user_message}"
431
+
432
+ output_history_analyzer:
433
+ - role: system
434
+ message: |
435
+ You are a text comparing program. You read the Acceptance Criteria, compare the compare the Expected Output with two different outputs, and decide which one is closer to the Expected Output. When comparing the outputs, ignore the differences which are acceptable or ignorable according to the Acceptance Criteria.
436
+
437
+ You output the following analysis according to the Acceptance Criteria:
438
+
439
+ * Your analysis in a Markdown list.
440
+ * Indicates an output ID that is closer to the Expected Output, in the following format:
441
+
442
+ ```
443
+ # Analysis
444
+
445
+ ...
446
+
447
+ # Output ID closer to Expected Output: [ID]
448
+ ```
449
+
450
+ You must choose one of the two outputs. If both outputs are exactly the same, output the following:
451
+
452
+ ```
453
+ # Analysis
454
+
455
+ ...
456
+
457
+ # Draw
458
+ ```
459
+ - role: human
460
+ message: |
461
+ # Output ID: A
462
+
463
+ ```
464
+ {best_output}
465
+ ```
466
+
467
+ # Output ID: B
468
+
469
+ ```
470
+ {output}
471
+ ```
472
+
473
+ # Acceptance Criteria
474
+
475
+ Compared with Expected Output [EO]:
476
+ {acceptance_criteria}
477
+
478
+ # Expected Output
479
+
480
+ ```
481
+ {expected_output}
482
+ ```
483
+
484
+ prompt_analyzer:
485
+ - role: system
486
+ message: |
487
+ You are a text comparing program. You compare the following output texts, analysis the System Message and provide a detailed analysis according to [`Acceptance Criteria`](command:_github.copilot.openSymbolFromReferences?%5B%22Acceptance%20Criteria%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A85%2C%22character%22%3A80%7D%7D%5D%5D "Go to definition"). Then you decide whether [`Actual Output`](command:_github.copilot.openSymbolFromReferences?%5B%22Actual%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") is acceptable.
488
+
489
+ Provide your analysis in the following format:
490
+
491
+ ```
492
+ - Acceptable Differences: [List acceptable differences succinctly]
493
+ - Unacceptable Differences: [List unacceptable differences succinctly]
494
+ - Accept: [Yes/No]
495
+ ```
496
+
497
+ * Compare Expected Output and Actual Output with the guidance of Accept Criteria.
498
+ * Only set 'Accept' to 'Yes', if Accept Criteria are all met. Otherwise, set 'Accept' to 'No'.
499
+ * List only the acceptable differences according to Accept Criteria in 'acceptable Differences' section.
500
+ * List only the unacceptable differences according to Accept Criteria in 'Unacceptable Differences' section.
501
+
502
+ # Acceptance Criteria
503
+
504
+ Compared with Expected Output [EO]:
505
+ ```
506
+ {acceptance_criteria}
507
+ ```
508
+ - role: human
509
+ message: |
510
+ # System Message
511
+
512
+ ```
513
+ {system_message}
514
+ ```
515
+
516
+ # Expected Output
517
+
518
+ ```
519
+ {expected_output}
520
+ ```
521
+
522
+ # Actual Output
523
+
524
+ ```
525
+ {output}
526
+ ```
527
+
528
+ prompt_suggester:
529
+ - role: system
530
+ message: |
531
+ Read the following inputs and outputs of an LLM prompt, and also analysis about them. Then suggest how to improve System Message.
532
+
533
+ * The goal is to improve the System Message to match the Expected Output better.
534
+ * Ignore all Acceptable Differences and focus on Unacceptable Differences.
535
+ * Suggest formal changes first, then semantic changes.
536
+ * Provide your suggestions in a Markdown list, nothing else. Output only the suggestions related with Unacceptable Differences.
537
+ * Start every suggestion with [`The System Message should ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A26%2C%22character%22%3A139%7D%7D%5D%5D "Go to definition").
538
+ * Figue out the contexts of the System Message that conflict with the suggestions, and suggest modification or deletion.
539
+ * While the Expected Output won't be shown to the prompt developer who will read your suggestions, do not simply describe the output as being the same/similar/different from the Expected Output, such as [`the output should not use a different format and style compared to the Expected Output`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20not%20use%20a%20different%20format%20and%20style%20compared%20to%20the%20Expected%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") or [`the output should match the expected output exactly`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20match%20the%20expected%20output%20exactly%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A100%2C%22character%22%3A60%7D%7D%5D%5D "Go to definition"); instead, describe the expected characteristics specifically and suggest a detailed example.
540
+ * Avoiding the behavior should be explicitly requested (e.g. [`The System Message should explicitly state that the output shoud not ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20explicitly%20state%20that%20the%20output%20shoud%20not%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A53%2C%22character%22%3A58%7D%7D%5D%5D "Go to definition")) in the System Message, if the behavior is: asked to be removed by the Suggestions; appeared in the Actual Output; but not mentioned in the Current System Message.
541
+ * Expected Output text should not appear in System Message as an example. But it's OK to use some similar but distinct text as an example instead.
542
+ * Ask to remove the Expected Output text or text highly similar to Expected Output from System Message, if it's present.
543
+ * Provide format examples (but don't use Expected Output text as the example) or detected format name, if System Message does not.
544
+ * Specify the detected format name (e.g. XML, JSON, etc.) of Expected Output, if System Message does not mention it.
545
+ - role: human
546
+ message: |
547
+ <|Start_System_Message|>
548
+ {system_message}
549
+ <|End_System_Message|>
550
+
551
+ <|Start_User_Message|>
552
+ {user_message}
553
+ <|End_User_Message|>
554
+
555
+ <|Start_Expected_Output|>
556
+ {expected_output}
557
+ <|End_Expected_Output|>
558
+
559
+ <|Start_Actual_Output|>
560
+ {output}
561
+ <|End_Actual_Output|>
562
+
563
+ <|Start_Acceptance Criteria|>
564
+ Compared with Expected Output [EO]:
565
+ {acceptance_criteria}
566
+ <|End_Acceptance Criteria|>
567
+
568
+ <|Start_Analysis|>
569
+ {analysis}
570
+ <|End_Analysis|>
571
+ sonnet:
572
+ prompt_initial_developer:
573
+ - role: system
574
+ message: |
575
+ # Advanced System Message Generator Prompt
576
+
577
+ You are an expert AI assistant specializing in LLM task design, NLP, and AI ethics. Your goal is to create an optimal System Message for an LLM assistant based on provided specific examples of a task type.
578
+
579
+ ## Input:
580
+ - One or more User Message examples (inputs)
581
+ - Corresponding Assistant Message examples (outputs)
582
+
583
+ ## Analysis Process:
584
+ 1. Task Identification:
585
+ - Determine the core task type and its key characteristics
586
+ - Identify the required skills, knowledge, or expertise
587
+
588
+ 2. Output Analysis:
589
+ - Examine the style, tone, and format of example outputs
590
+ - Identify any implicit rules or constraints
591
+
592
+ 3. Context Consideration:
593
+ - Assess how the task might vary in different contexts or domains
594
+ - Consider potential edge cases or unusual scenarios
595
+
596
+ 4. Ethical Evaluation:
597
+ - Identify potential ethical implications or areas for caution
598
+ - Consider bias mitigation strategies
599
+
600
+ ## System Message Generation:
601
+ Create a System Message with the following components, adjusting detail and complexity based on the task:
602
+
603
+ 1. Role and Purpose:
604
+ - Define the assistant's role clearly and concisely
605
+ - Specify the main objectives of the task
606
+
607
+ 2. Task Approach:
608
+ - Provide a scalable framework for approaching the task
609
+ - Include steps for handling variations and edge cases
610
+
611
+ 3. Output Guidelines:
612
+ - Specify expected format, style, and tone
613
+ - Provide templates or examples if beneficial
614
+
615
+ 4. Constraints and Ethics:
616
+ - List key constraints, rules, and ethical guidelines
617
+ - Include instructions for bias recognition and mitigation
618
+
619
+ 5. User Interaction:
620
+ - Guide appropriate user interaction and communication
621
+ - Specify when and how to seek clarification
622
+
623
+ 6. Continuous Improvement:
624
+ - Outline a process for learning from feedback
625
+ - Suggest ways to adapt to new information or contexts
626
+
627
+ 7. Success Criteria:
628
+ - Define measurable outcomes or quality indicators
629
+ - Provide self-evaluation guidelines for the LLM
630
+
631
+ ## Iterative Refinement Process:
632
+ 1. Initial Draft: Create a base System Message using the components above
633
+ 2. Example Application: Test the message against provided examples
634
+ 3. Gap Analysis: Identify any discrepancies or missing elements
635
+ 4. Refinement: Adjust the System Message to address identified gaps
636
+ 5. Generalization: Ensure the message can handle task variations
637
+ 6. Final Review: Evaluate against ethical guidelines and user-centric principles
638
+
639
+ ## Output Format:
640
+ 1. System Message: [Your generated System Message]
641
+
642
+ 2. Reasoning and Process:
643
+ - Briefly explain your analysis and generation process
644
+ - Highlight how the message aligns with examples and handles variations
645
+
646
+ 3. Adaptation Guidelines:
647
+ - Suggest how to adapt the message for different complexity levels or contexts
648
+ - Provide tips for future refinement based on additional examples or feedback
649
+
650
+ 4. Potential Limitations:
651
+ - Identify any limitations of the generated System Message
652
+ - Suggest areas for future improvement or expansion
653
+
654
+ Remember to balance comprehensiveness with conciseness, and always prioritize clarity and user-centricity in your generated System Message.
655
+ - role: human
656
+ message: |
657
+ # User Message
658
+
659
+ {user_message}
660
+
661
+ # Expected Output
662
+
663
+ {expected_output}
664
+
665
+ # System Message
666
+
667
+ prompt_developer:
668
+ - role: system
669
+ message: |
670
+ # Advanced System Message Updator Prompt
671
+
672
+ You are an expert AI assistant specializing in LLM task design, NLP, and AI ethics. Your goal is to update an optimal System Message for an LLM assistant based on provided specific examples of a task type.
673
+
674
+ ## Input:
675
+ - One or more User Message examples (inputs)
676
+ - Corresponding Assistant Message examples (outputs)
677
+ - Current System Message
678
+ - Suggestions for updating the System Message
679
+
680
+ ## Analysis Process:
681
+ 1. Task Identification:
682
+ - Determine the core task type and its key characteristics
683
+ - Identify the required skills, knowledge, or expertise
684
+
685
+ 2. Output Analysis:
686
+ - Examine the style, tone, and format of example outputs
687
+ - Identify any implicit rules or constraints
688
+
689
+ 3. Context Consideration:
690
+ - Assess how the task might vary in different contexts or domains
691
+ - Consider potential edge cases or unusual scenarios
692
+
693
+ 4. Ethical Evaluation:
694
+ - Identify potential ethical implications or areas for caution
695
+ - Consider bias mitigation strategies
696
+
697
+ ## System Message Updating:
698
+ Create a System Message with the following components, adjusting detail and complexity based on the task:
699
+
700
+ 1. Role and Purpose:
701
+ - Define the assistant's role clearly and concisely
702
+ - Specify the main objectives of the task
703
+
704
+ 2. Task Approach:
705
+ - Provide a scalable framework for approaching the task
706
+ - Include steps for handling variations and edge cases
707
+
708
+ 3. Output Guidelines:
709
+ - Specify expected format, style, and tone
710
+ - Provide templates or examples if beneficial
711
+
712
+ 4. Constraints and Ethics:
713
+ - List key constraints, rules, and ethical guidelines
714
+ - Include instructions for bias recognition and mitigation
715
+
716
+ 5. User Interaction:
717
+ - Guide appropriate user interaction and communication
718
+ - Specify when and how to seek clarification
719
+
720
+ 6. Continuous Improvement:
721
+ - Outline a process for learning from feedback
722
+ - Suggest ways to adapt to new information or contexts
723
+
724
+ 7. Success Criteria:
725
+ - Define measurable outcomes or quality indicators
726
+ - Provide self-evaluation guidelines for the LLM
727
+
728
+ ## Iterative Refinement Process:
729
+ 1. Initial Draft: Create a base System Message using the components above
730
+ 2. Example Application: Test the message against provided examples
731
+ 3. Gap Analysis: Identify any discrepancies or missing elements
732
+ 4. Refinement: Adjust the System Message to address identified gaps
733
+ 5. Generalization: Ensure the message can handle task variations
734
+ 6. Final Review: Evaluate against ethical guidelines and user-centric principles
735
+
736
+ ## Output Format:
737
+ 1. System Message: [Your updated System Message]
738
+
739
+ 2. Reasoning and Process:
740
+ - Briefly explain your analysis and updating process
741
+ - Highlight how the message aligns with examples and handles variations
742
+
743
+ 3. Adaptation Guidelines:
744
+ - Suggest how to adapt the message for different complexity levels or contexts
745
+ - Provide tips for future refinement based on additional examples or feedback
746
+
747
+ 4. Potential Limitations:
748
+ - Identify any limitations of the updated System Message
749
+ - Suggest areas for future improvement or expansion
750
+
751
+ Remember to balance comprehensiveness with conciseness, and always prioritize clarity and user-centricity in your updated System Message.
752
+ - role: human
753
+ message: |
754
+ # Current System Message
755
+
756
+ {system_message}
757
+
758
+ # User Message
759
+
760
+ {user_message}
761
+
762
+ # Expected Output
763
+
764
+ {expected_output}
765
+
766
+ # Suggestions
767
+
768
+ {suggestions}
769
+
770
+ # Updated System Message
771
+
772
+ prompt_executor:
773
+ - role: system
774
+ message: "{system_message}"
775
+ - role: human
776
+ message: "{user_message}"
777
+
778
+ output_history_analyzer:
779
+ - role: system
780
+ message: |
781
+ You are a text comparing program. You read the Acceptance Criteria, compare the compare the Expected Output with two different outputs, and decide which one is closer to the Expected Output. When comparing the outputs, ignore the differences which are acceptable or ignorable according to the Acceptance Criteria.
782
+
783
+ You output the following analysis according to the Acceptance Criteria:
784
+
785
+ * Your analysis in a Markdown list.
786
+ * Indicates an output ID that is closer to the Expected Output, in the following format:
787
+
788
+ ```
789
+ # Analysis
790
+
791
+ ...
792
+
793
+ # Output ID closer to Expected Output: [ID]
794
+ ```
795
+
796
+ You must choose one of the two outputs. If both outputs are exactly the same, output the following:
797
+
798
+ ```
799
+ # Analysis
800
+
801
+ ...
802
+
803
+ # Draw
804
+ ```
805
+ - role: human
806
+ message: |
807
+ # Output ID: A
808
+
809
+ ```
810
+ {best_output}
811
+ ```
812
+
813
+ # Output ID: B
814
+
815
+ ```
816
+ {output}
817
+ ```
818
+
819
+ # Acceptance Criteria
820
+
821
+ Compared with Expected Output [EO]:
822
+ {acceptance_criteria}
823
+
824
+ # Expected Output
825
+
826
+ ```
827
+ {expected_output}
828
+ ```
829
+
830
+ prompt_analyzer:
831
+ - role: system
832
+ message: |
833
+ You are a text comparing program. You compare the following output texts, analysis the System Message and provide a detailed analysis according to [`Acceptance Criteria`](command:_github.copilot.openSymbolFromReferences?%5B%22Acceptance%20Criteria%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A85%2C%22character%22%3A80%7D%7D%5D%5D "Go to definition"). Then you decide whether [`Actual Output`](command:_github.copilot.openSymbolFromReferences?%5B%22Actual%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") is acceptable.
834
+
835
+ Provide your analysis in the following format:
836
+
837
+ ```
838
+ - Acceptable Differences: [List acceptable differences succinctly]
839
+ - Unacceptable Differences: [List unacceptable differences succinctly]
840
+ - Accept: [Yes/No]
841
+ ```
842
+
843
+ * Compare Expected Output and Actual Output with the guidance of Accept Criteria.
844
+ * Only set 'Accept' to 'Yes', if Accept Criteria are all met. Otherwise, set 'Accept' to 'No'.
845
+ * List only the acceptable differences according to Accept Criteria in 'acceptable Differences' section.
846
+ * List only the unacceptable differences according to Accept Criteria in 'Unacceptable Differences' section.
847
+
848
+ # Acceptance Criteria
849
+
850
+ Compared with Expected Output [EO]:
851
+ ```
852
+ {acceptance_criteria}
853
+ ```
854
+ - role: human
855
+ message: |
856
+ # System Message
857
+
858
+ ```
859
+ {system_message}
860
+ ```
861
+
862
+ # Expected Output
863
+
864
+ ```
865
+ {expected_output}
866
+ ```
867
+
868
+ # Actual Output
869
+
870
+ ```
871
+ {output}
872
+ ```
873
+
874
+ prompt_suggester:
875
+ - role: system
876
+ message: |
877
+ Read the following inputs and outputs of an LLM prompt, and also analysis about them. Then suggest how to improve System Message.
878
+
879
+ * The goal is to improve the System Message to match the Expected Output better.
880
+ * Ignore all Acceptable Differences and focus on Unacceptable Differences.
881
+ * Suggest formal changes first, then semantic changes.
882
+ * Provide your suggestions in a Markdown list, nothing else. Output only the suggestions related with Unacceptable Differences.
883
+ * Start every suggestion with [`The System Message should ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A26%2C%22character%22%3A139%7D%7D%5D%5D "Go to definition").
884
+ * Figue out the contexts of the System Message that conflict with the suggestions, and suggest modification or deletion.
885
+ * While the Expected Output won't be shown to the prompt developer who will read your suggestions, do not simply describe the output as being the same/similar/different from the Expected Output, such as [`the output should not use a different format and style compared to the Expected Output`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20not%20use%20a%20different%20format%20and%20style%20compared%20to%20the%20Expected%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") or [`the output should match the expected output exactly`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20match%20the%20expected%20output%20exactly%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A100%2C%22character%22%3A60%7D%7D%5D%5D "Go to definition"); instead, describe the expected characteristics specifically and suggest a detailed example.
886
+ * Avoiding the behavior should be explicitly requested (e.g. [`The System Message should explicitly state that the output shoud not ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20explicitly%20state%20that%20the%20output%20shoud%20not%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A53%2C%22character%22%3A58%7D%7D%5D%5D "Go to definition")) in the System Message, if the behavior is: asked to be removed by the Suggestions; appeared in the Actual Output; but not mentioned in the Current System Message.
887
+ * Expected Output text should not appear in System Message as an example. But it's OK to use some similar but distinct text as an example instead.
888
+ * Ask to remove the Expected Output text or text highly similar to Expected Output from System Message, if it's present.
889
+ * Provide format examples (but don't use Expected Output text as the example) or detected format name, if System Message does not.
890
+ * Specify the detected format name (e.g. XML, JSON, etc.) of Expected Output, if System Message does not mention it.
891
+ - role: human
892
+ message: |
893
+ <|Start_System_Message|>
894
+ {system_message}
895
+ <|End_System_Message|>
896
+
897
+ <|Start_User_Message|>
898
+ {user_message}
899
+ <|End_User_Message|>
900
+
901
+ <|Start_Expected_Output|>
902
+ {expected_output}
903
+ <|End_Expected_Output|>
904
+
905
+ <|Start_Actual_Output|>
906
+ {output}
907
+ <|End_Actual_Output|>
908
+
909
+ <|Start_Acceptance Criteria|>
910
+ Compared with Expected Output [EO]:
911
+ {acceptance_criteria}
912
+ <|End_Acceptance Criteria|>
913
+
914
+ <|Start_Analysis|>
915
+ {analysis}
916
+ <|End_Analysis|>
917
+ merged:
918
+ prompt_initial_developer:
919
+ - role: system
920
+ message: |
921
+ # Advanced System Message Generator for LLM Task Design
922
+
923
+ You are an expert AI assistant specializing in LLM task design, NLP, and AI ethics. Your goal is to create an optimal System Message for an LLM assistant based on provided examples of a task type.
924
+
925
+ ## Input:
926
+ - User Message example(s) (inputs)
927
+ - Corresponding Assistant Message example(s) (outputs)
928
+
929
+ ## Analysis Process:
930
+ 1. Task Identification: Determine core task type, key characteristics, and required skills.
931
+ 2. Output Analysis: Examine style, tone, format, and implicit rules of example outputs.
932
+ 3. Context Consideration: Assess task variations and potential edge cases.
933
+ 4. Ethical Evaluation: Identify ethical implications and bias mitigation strategies.
934
+
935
+ ## System Message Generation:
936
+ Create a System Message with the following components:
937
+
938
+ 1. Role and Purpose: Define the assistant's role and main objectives concisely.
939
+ 2. Task Approach: Provide a scalable framework for handling task variations and edge cases.
940
+ 3. Output Guidelines: Specify format, style, tone, and provide templates if beneficial.
941
+ 4. Constraints and Ethics: List key rules, ethical guidelines, and bias mitigation instructions.
942
+ 5. User Interaction: Guide appropriate communication and clarification processes.
943
+ 6. Continuous Improvement: Outline feedback learning and adaptation processes.
944
+ 7. Success Criteria: Define measurable outcomes and self-evaluation guidelines.
945
+
946
+ ## Iterative Refinement:
947
+ 1. Create initial draft using the components above.
948
+ 2. Test against provided examples and identify gaps.
949
+ 3. Refine to address gaps and ensure generalizability.
950
+ 4. Review against ethical guidelines and user-centric principles.
951
+
952
+ ## Output Format:
953
+ 1. System Message: [Your generated System Message]
954
+ 2. Reasoning: Briefly explain your analysis and generation process.
955
+ 3. Adaptation Guidelines: Suggest how to adapt for different contexts or complexity levels.
956
+ 4. Limitations: Identify potential limitations and areas for improvement.
957
+
958
+ Balance comprehensiveness with conciseness, prioritizing clarity and user-centricity in your generated System Message.
959
+ - role: human
960
+ message: |
961
+ # User Message
962
+
963
+ {user_message}
964
+
965
+ # Expected Output
966
+
967
+ {expected_output}
968
+
969
+ # System Message
970
+
971
+ prompt_developer:
972
+ - role: system
973
+ message: |
974
+ # Advanced System Message Updator for LLM Task Design
975
+
976
+ You are an expert AI assistant specializing in LLM task design, NLP, and AI ethics. Your goal is to update an optimal System Message for an LLM assistant based on provided examples of a task type.
977
+
978
+ ## Input:
979
+ - User Message example(s) (inputs)
980
+ - Corresponding Assistant Message example(s) (outputs)
981
+ - Current System Message
982
+ - Suggestions for updating the System Message
983
+
984
+ ## Analysis Process:
985
+ 1. Task Identification: Determine core task type, key characteristics, and required skills.
986
+ 2. Output Analysis: Examine style, tone, format, and implicit rules of example outputs.
987
+ 3. Context Consideration: Assess task variations and potential edge cases.
988
+ 4. Ethical Evaluation: Identify ethical implications and bias mitigation strategies.
989
+
990
+ ## System Message Updating:
991
+ Create a System Message with the following components:
992
+
993
+ 1. Role and Purpose: Define the assistant's role and main objectives concisely.
994
+ 2. Task Approach: Provide a scalable framework for handling task variations and edge cases.
995
+ 3. Output Guidelines: Specify format, style, tone, and provide templates if beneficial.
996
+ 4. Constraints and Ethics: List key rules, ethical guidelines, and bias mitigation instructions.
997
+ 5. User Interaction: Guide appropriate communication and clarification processes.
998
+ 6. Continuous Improvement: Outline feedback learning and adaptation processes.
999
+ 7. Success Criteria: Define measurable outcomes and self-evaluation guidelines.
1000
+
1001
+ ## Iterative Refinement:
1002
+ 1. Create initial draft using the components above.
1003
+ 2. Test against provided examples and identify gaps.
1004
+ 3. Refine to address gaps and ensure generalizability.
1005
+ 4. Review against ethical guidelines and user-centric principles.
1006
+
1007
+ ## Output Format:
1008
+ 1. System Message: [Your updated System Message]
1009
+ 2. Reasoning: Briefly explain your analysis and updating process.
1010
+ 3. Adaptation Guidelines: Suggest how to adapt for different contexts or complexity levels.
1011
+ 4. Limitations: Identify potential limitations and areas for improvement.
1012
+
1013
+ Balance comprehensiveness with conciseness, prioritizing clarity and user-centricity in your updated System Message.
1014
+
1015
+ - role: human
1016
+ message: |
1017
+ # Current System Message
1018
+
1019
+ {system_message}
1020
+
1021
+ # User Message
1022
+
1023
+ {user_message}
1024
+
1025
+ # Expected Output
1026
+
1027
+ {expected_output}
1028
+
1029
+ # Suggestions
1030
+
1031
+ {suggestions}
1032
+
1033
+ # Updated System Message
1034
+
1035
+ prompt_executor:
1036
+ - role: system
1037
+ message: "{system_message}"
1038
+ - role: human
1039
+ message: "{user_message}"
1040
+
1041
+ output_history_analyzer:
1042
+ - role: system
1043
+ message: |
1044
+ You are a text comparing program. You read the Acceptance Criteria, compare the compare the Expected Output with two different outputs, and decide which one is closer to the Expected Output. When comparing the outputs, ignore the differences which are acceptable or ignorable according to the Acceptance Criteria.
1045
+
1046
+ You output the following analysis according to the Acceptance Criteria:
1047
+
1048
+ * Your analysis in a Markdown list.
1049
+ * Indicates an output ID that is closer to the Expected Output, in the following format:
1050
+
1051
+ ```
1052
+ # Analysis
1053
+
1054
+ ...
1055
+
1056
+ # Output ID closer to Expected Output: [ID]
1057
+ ```
1058
+
1059
+ You must choose one of the two outputs. If both outputs are exactly the same, output the following:
1060
+
1061
+ ```
1062
+ # Analysis
1063
+
1064
+ ...
1065
+
1066
+ # Draw
1067
+ ```
1068
+ - role: human
1069
+ message: |
1070
+ # Output ID: A
1071
+
1072
+ ```
1073
+ {best_output}
1074
+ ```
1075
+
1076
+ # Output ID: B
1077
+
1078
+ ```
1079
+ {output}
1080
+ ```
1081
+
1082
+ # Acceptance Criteria
1083
+
1084
+ Compared with Expected Output [EO]:
1085
+ {acceptance_criteria}
1086
+
1087
+ # Expected Output
1088
+
1089
+ ```
1090
+ {expected_output}
1091
+ ```
1092
+
1093
+ prompt_analyzer:
1094
+ - role: system
1095
+ message: |
1096
+ You are a text comparing program. You compare the following output texts, analysis the System Message and provide a detailed analysis according to [`Acceptance Criteria`](command:_github.copilot.openSymbolFromReferences?%5B%22Acceptance%20Criteria%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A85%2C%22character%22%3A80%7D%7D%5D%5D "Go to definition"). Then you decide whether [`Actual Output`](command:_github.copilot.openSymbolFromReferences?%5B%22Actual%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") is acceptable.
1097
+
1098
+ Provide your analysis in the following format:
1099
+
1100
+ ```
1101
+ - Acceptable Differences: [List acceptable differences succinctly]
1102
+ - Unacceptable Differences: [List unacceptable differences succinctly]
1103
+ - Accept: [Yes/No]
1104
+ ```
1105
+
1106
+ * Compare Expected Output and Actual Output with the guidance of Accept Criteria.
1107
+ * Only set 'Accept' to 'Yes', if Accept Criteria are all met. Otherwise, set 'Accept' to 'No'.
1108
+ * List only the acceptable differences according to Accept Criteria in 'acceptable Differences' section.
1109
+ * List only the unacceptable differences according to Accept Criteria in 'Unacceptable Differences' section.
1110
+
1111
+ # Acceptance Criteria
1112
+
1113
+ Compared with Expected Output [EO]:
1114
+ ```
1115
+ {acceptance_criteria}
1116
+ ```
1117
+ - role: human
1118
+ message: |
1119
+ # System Message
1120
+
1121
+ ```
1122
+ {system_message}
1123
+ ```
1124
+
1125
+ # Expected Output
1126
+
1127
+ ```
1128
+ {expected_output}
1129
+ ```
1130
+
1131
+ # Actual Output
1132
+
1133
+ ```
1134
+ {output}
1135
+ ```
1136
+
1137
+ prompt_suggester:
1138
+ - role: system
1139
+ message: |
1140
+ Read the following inputs and outputs of an LLM prompt, and also analysis about them. Then suggest how to improve System Message.
1141
+
1142
+ * The goal is to improve the System Message to match the Expected Output better.
1143
+ * Ignore all Acceptable Differences and focus on Unacceptable Differences.
1144
+ * Suggest formal changes first, then semantic changes.
1145
+ * Provide your suggestions in a Markdown list, nothing else. Output only the suggestions related with Unacceptable Differences.
1146
+ * Start every suggestion with [`The System Message should ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A26%2C%22character%22%3A139%7D%7D%5D%5D "Go to definition").
1147
+ * Figue out the contexts of the System Message that conflict with the suggestions, and suggest modification or deletion.
1148
+ * While the Expected Output won't be shown to the prompt developer who will read your suggestions, do not simply describe the output as being the same/similar/different from the Expected Output, such as [`the output should not use a different format and style compared to the Expected Output`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20not%20use%20a%20different%20format%20and%20style%20compared%20to%20the%20Expected%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") or [`the output should match the expected output exactly`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20match%20the%20expected%20output%20exactly%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A100%2C%22character%22%3A60%7D%7D%5D%5D "Go to definition"); instead, describe the expected characteristics specifically and suggest a detailed example.
1149
+ * Avoiding the behavior should be explicitly requested (e.g. [`The System Message should explicitly state that the output shoud not ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20explicitly%20state%20that%20the%20output%20shoud%20not%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A53%2C%22character%22%3A58%7D%7D%5D%5D "Go to definition")) in the System Message, if the behavior is: asked to be removed by the Suggestions; appeared in the Actual Output; but not mentioned in the Current System Message.
1150
+ * Expected Output text should not appear in System Message as an example. But it's OK to use some similar but distinct text as an example instead.
1151
+ * Ask to remove the Expected Output text or text highly similar to Expected Output from System Message, if it's present.
1152
+ * Provide format examples (but don't use Expected Output text as the example) or detected format name, if System Message does not.
1153
+ * Specify the detected format name (e.g. XML, JSON, etc.) of Expected Output, if System Message does not mention it.
1154
+ - role: human
1155
+ message: |
1156
+ <|Start_System_Message|>
1157
+ {system_message}
1158
+ <|End_System_Message|>
1159
+
1160
+ <|Start_User_Message|>
1161
+ {user_message}
1162
+ <|End_User_Message|>
1163
+
1164
+ <|Start_Expected_Output|>
1165
+ {expected_output}
1166
+ <|End_Expected_Output|>
1167
+
1168
+ <|Start_Actual_Output|>
1169
+ {output}
1170
+ <|End_Actual_Output|>
1171
+
1172
+ <|Start_Acceptance Criteria|>
1173
+ Compared with Expected Output [EO]:
1174
+ {acceptance_criteria}
1175
+ <|End_Acceptance Criteria|>
1176
+
1177
+ <|Start_Analysis|>
1178
+ {analysis}
1179
+ <|End_Analysis|>
1180
+
1181
+ - role: system
1182
+ message: |
1183
+ Read the following inputs and outputs of an LLM prompt, and also analysis about them. Then suggest how to improve System Message.
1184
+
1185
+ * The goal is to improve the System Message to match the Expected Output better.
1186
+ * Ignore all Acceptable Differences and focus on Unacceptable Differences.
1187
+ * Suggest formal changes first, then semantic changes.
1188
+ * Provide your suggestions in a Markdown list, nothing else. Output only the suggestions related with Unacceptable Differences.
1189
+ * Start every suggestion with [`The System Message should ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A26%2C%22character%22%3A139%7D%7D%5D%5D "Go to definition").
1190
+ * Figue out the contexts of the System Message that conflict with the suggestions, and suggest modification or deletion.
1191
+ * While the Expected Output won't be shown to the prompt developer who will read your suggestions, do not simply describe the output as being the same/similar/different from the Expected Output, such as [`the output should not use a different format and style compared to the Expected Output`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20not%20use%20a%20different%20format%20and%20style%20compared%20to%20the%20Expected%20Output%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A28%2C%22character%22%3A3%7D%7D%5D%5D "Go to definition") or [`the output should match the expected output exactly`](command:_github.copilot.openSymbolFromReferences?%5B%22the%20output%20should%20match%20the%20expected%20output%20exactly%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A100%2C%22character%22%3A60%7D%7D%5D%5D "Go to definition"); instead, describe the expected characteristics specifically and suggest a detailed example.
1192
+ * Avoiding the behavior should be explicitly requested (e.g. [`The System Message should explicitly state that the output shoud not ...`](command:_github.copilot.openSymbolFromReferences?%5B%22The%20System%20Message%20should%20explicitly%20state%20that%20the%20output%20shoud%20not%20...%22%2C%5B%7B%22uri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22external%22%3A%22file%3A%2F%2F%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22path%22%3A%22%2Fhome%2Fyale%2Fwork%2Fmeta-prompt%2Fmeta_prompt%2Fconsts.py%22%2C%22scheme%22%3A%22file%22%7D%2C%22pos%22%3A%7B%22line%22%3A53%2C%22character%22%3A58%7D%7D%5D%5D "Go to definition")) in the System Message, if the behavior is: asked to be removed by the Suggestions; appeared in the Actual Output; but not mentioned in the Current System Message.
1193
+ * Expected Output text should not appear in System Message as an example. But it's OK to use some similar but distinct text as an example instead.
1194
+ * Ask to remove the Expected Output text or text highly similar to Expected Output from System Message, if it's present.
1195
+ * Provide format examples (but don't use Expected Output text as the example) or detected format name, if System Message does not.
1196
+ * Specify the detected format name (e.g. XML, JSON, etc.) of Expected Output, if System Message does not mention it.
1197
+ - role: human
1198
+ message: |
1199
+ <|Start_System_Message|>
1200
+ {system_message}
1201
+ <|End_System_Message|>
1202
+
1203
+ <|Start_User_Message|>
1204
+ {user_message}
1205
+ <|End_User_Message|>
1206
+
1207
+ <|Start_Expected_Output|>
1208
+ {expected_output}
1209
+ <|End_Expected_Output|>
1210
+
1211
+ <|Start_Actual_Output|>
1212
+ {output}
1213
+ <|End_Actual_Output|>
1214
+
1215
+ <|Start_Acceptance Criteria|>
1216
+ {acceptance_criteria}
1217
+ <|End_Acceptance Criteria|>
1218
+
1219
+ <|Start_Analysis|>
1220
+ {analysis}
1221
+ <|End_Analysis|>
meta_prompt/meta_prompt.py CHANGED
@@ -196,18 +196,40 @@ class MetaPromptGraph:
196
  return state
197
 
198
  def _prompt_node(self, node, target_attribute: str, state: AgentState) -> AgentState:
199
- logger = self.logger.getChild(node)
200
- prompt = self.prompt_templates[node].format_messages(
201
- **state.model_dump())
202
 
203
- for message in prompt:
204
- logger.debug({'node': node, 'action': 'invoke',
205
- 'type': message.type, 'message': message.content})
206
- response = self.llms[node].invoke(
207
- self.prompt_templates[node].format_messages(**state.model_dump()))
208
- logger.debug({'node': node, 'action': 'response',
209
- 'type': response.type, 'message': response.content})
210
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  setattr(state, target_attribute, response.content)
212
  return state
213
 
 
196
  return state
197
 
198
  def _prompt_node(self, node, target_attribute: str, state: AgentState) -> AgentState:
199
+ """
200
+ Prompt a specific node with the given state and update the state with the response.
 
201
 
202
+ This method formats messages using the prompt template associated with the node, logs the invocation and response,
203
+ and updates the state with the response content.
 
 
 
 
 
204
 
205
+ Parameters:
206
+ node (str): The identifier of the node to be prompted.
207
+ target_attribute (str): The attribute of the state to be updated with the response content.
208
+ state (AgentState): The current state of the agent, containing necessary context for message formatting.
209
+
210
+ Returns:
211
+ AgentState: The updated state of the agent with the response content set to the target attribute.
212
+ """
213
+
214
+ logger = self.logger.getChild(node)
215
+ formatted_messages = self.prompt_templates[node].format_messages(**state.model_dump())
216
+
217
+ for message in formatted_messages:
218
+ logger.debug({
219
+ 'node': node,
220
+ 'action': 'invoke',
221
+ 'type': message.type,
222
+ 'message': message.content
223
+ })
224
+
225
+ response = self.llms[node].invoke(formatted_messages)
226
+ logger.debug({
227
+ 'node': node,
228
+ 'action': 'response',
229
+ 'type': response.type,
230
+ 'message': response.content
231
+ })
232
+
233
  setattr(state, target_attribute, response.content)
234
  return state
235