fix: resolve CI linting and type errors
Some checks failed
CI / test (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled

This commit is contained in:
2026-02-04 12:58:03 +00:00
parent d38570a6c9
commit 326d82e2d8

View File

@@ -1,11 +1,13 @@
"""Run command for executing prompts."""
import asyncio import asyncio
from typing import Any, Dict
import click import click
from pathlib import Path
from promptforge.core.prompt import Prompt from promptforge.core.prompt import Prompt
from promptforge.core.template import TemplateEngine from promptforge.core.template import TemplateEngine
from promptforge.core.config import get_config from promptforge.core.config import get_config
from promptforge.providers import ProviderFactory from promptforge.providers import ProviderFactory
from promptforge.testing.validator import Validator
@click.command() @click.command()
@@ -33,7 +35,11 @@ def run(ctx, name: str, provider: str, var: tuple, output: str, stream: bool):
template_engine = TemplateEngine() template_engine = TemplateEngine()
try: try:
rendered = template_engine.render(prompt.content, variables, prompt.variables) rendered = template_engine.render(
prompt.content,
variables,
prompt.variables,
)
except Exception as e: except Exception as e:
click.echo(f"Template error: {e}", err=True) click.echo(f"Template error: {e}", err=True)
raise click.Abort() raise click.Abort()
@@ -42,10 +48,11 @@ def run(ctx, name: str, provider: str, var: tuple, output: str, stream: bool):
selected_provider = provider or prompt.provider or config.defaults.provider selected_provider = provider or prompt.provider or config.defaults.provider
try: try:
provider_config: Dict[str, Any] = dict(config.providers.get(selected_provider, {}))
provider_instance = ProviderFactory.create( provider_instance = ProviderFactory.create(
selected_provider, selected_provider,
model=config.providers.get(selected_provider, {}).model if selected_provider in config.providers else None, model=provider_config.get("model") if isinstance(provider_config, dict) else None,
temperature=config.providers.get(selected_provider, {}).temperature if selected_provider in config.providers else 0.7, temperature=provider_config.get("temperature", 0.7) if isinstance(provider_config, dict) else 0.7,
) )
except Exception as e: except Exception as e:
click.echo(f"Provider error: {e}", err=True) click.echo(f"Provider error: {e}", err=True)
@@ -67,18 +74,26 @@ def run(ctx, name: str, provider: str, var: tuple, output: str, stream: bool):
import json import json
click.echo("\n" + json.dumps({"response": response}, indent=2)) click.echo("\n" + json.dumps({"response": response}, indent=2))
if prompt.validation_rules:
validate_response(prompt, response)
try:
asyncio.run(execute()) asyncio.run(execute())
except Exception as e:
click.echo(f"Execution error: {e}", err=True)
raise click.Abort()
def validate_response(prompt: Prompt, response: str): def validate_response(prompt: Prompt, response: str):
"""Validate response against rules."""
for rule in prompt.validation_rules: for rule in prompt.validation_rules:
if rule.type == "regex": if rule.type == "regex":
import re import re
if not re.search(rule.pattern or "", response): if not re.search(rule.pattern or "", response):
click.echo(f"Warning: Response failed regex validation", err=True) click.echo("Warning: Response failed regex validation", err=True)
elif rule.type == "json": elif rule.type == "json":
try: try:
import json import json
json.loads(response) json.loads(response)
except json.JSONDecodeError: except json.JSONDecodeError:
click.echo(f"Warning: Response is not valid JSON", err=True) click.echo("Warning: Response is not valid JSON", err=True)