66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
__version__ = "0.1.0"
|
|
|
|
from agent.input_parser import InputParser
|
|
from agent.rule_loader import RuleLoader
|
|
from agent.prompt_builder import PromptBuilder
|
|
from agent.api_client import APIClient
|
|
from agent.output_writer import OutputWriter
|
|
from agent.models import ProgramMeta, FileInfo, CopyField, KeyInfo, TableColumn, TableInfo
|
|
from agent.config import load_config
|
|
|
|
|
|
def generate(design_md: str, source_cbl: str, file_db_md: str,
|
|
cpy_dir: str, db_md: str, output_dir: str = "output",
|
|
api_key: str = None, api_model: str = None,
|
|
rules_dir: str = "rules",
|
|
max_tokens: int = None) -> dict:
|
|
"""生成测试数据的主入口函数。"""
|
|
import os
|
|
|
|
cfg = load_config()['api']
|
|
if api_key is None:
|
|
api_key = cfg['api_key']
|
|
if api_model is None:
|
|
api_model = cfg['model']
|
|
if max_tokens is None:
|
|
max_tokens = cfg['max_tokens']
|
|
|
|
print(f"== 解析入力: {design_md}")
|
|
|
|
parser = InputParser(design_md, source_cbl, file_db_md, cpy_dir, db_md)
|
|
meta = parser.run()
|
|
|
|
if meta.pgm_type == 'サブ':
|
|
raise ValueError(f"程序 {meta.program_id} はサブプログラムです。主プログラムのみ処理対象です。")
|
|
|
|
print(f" プログラムID: {meta.program_id}, パターン: {meta.pgm_pattern}, 入力タイプ: {meta.input_type}")
|
|
|
|
# If rules_dir is relative, resolve from this file's location or cwd
|
|
if not os.path.isabs(rules_dir):
|
|
rules_dir = os.path.join(os.path.dirname(__file__), '..', rules_dir)
|
|
|
|
loader = RuleLoader(rules_dir)
|
|
rules_text, group_descriptions, group_count = loader.load(meta)
|
|
|
|
print(f" ルール読み込み完了, グループ数: {group_count}")
|
|
|
|
builder = PromptBuilder()
|
|
prompt = builder.build(meta, rules_text, group_descriptions, group_count)
|
|
|
|
client = APIClient(api_key=api_key, model=api_model, max_tokens=max_tokens)
|
|
print(f" API呼び出し中...")
|
|
result = client.generate(prompt)
|
|
print(f" API応答受信")
|
|
|
|
writer = OutputWriter(output_dir)
|
|
output_files = writer.write(meta.program_id, result, meta.input_type)
|
|
|
|
print(f" 出力完了: {len(output_files)} ファイル")
|
|
|
|
return {
|
|
"output_files": output_files,
|
|
"program_id": meta.program_id,
|
|
"groups": group_count,
|
|
"input_type": meta.input_type,
|
|
}
|