registry.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from __future__ import annotations
  2. import argparse
  3. import json
  4. from shared.config import load_config
  5. def build_registry_payload() -> dict:
  6. config = load_config()
  7. provider = config.get("provider", {})
  8. generation = config.get("generation", {})
  9. return {
  10. "skill": "qwen-image-skill",
  11. "provider": {
  12. "name": provider.get("name", "qwen-compatible"),
  13. "model": provider.get("model", "qwen-image"),
  14. },
  15. "workflows": [
  16. {
  17. "id": "qwen/text-to-image",
  18. "name": "Qwen Text to Image",
  19. "description": "Generate images from natural language prompts through a Qwen-compatible image generation API.",
  20. "enabled": True,
  21. "parameters": {
  22. "prompt": {
  23. "type": "string",
  24. "required": True,
  25. "description": "Main image prompt. Include subject, style, composition, lighting, and quality requirements.",
  26. },
  27. "size": {
  28. "type": "string",
  29. "required": False,
  30. "description": "Output size such as 1024x1024, 1280x720, or 720x1280.",
  31. "default": generation.get("default_size", "1024x1024"),
  32. },
  33. "n": {
  34. "type": "int",
  35. "required": False,
  36. "description": "Number of images to generate in one request.",
  37. "default": generation.get("default_n", 1),
  38. },
  39. "quality": {
  40. "type": "string",
  41. "required": False,
  42. "description": "Provider quality hint, for example standard or hd.",
  43. "default": generation.get("default_quality", "standard"),
  44. },
  45. "negative_prompt": {
  46. "type": "string",
  47. "required": False,
  48. "description": "Things to avoid in the generated image.",
  49. },
  50. "seed": {
  51. "type": "int",
  52. "required": False,
  53. "description": "Optional deterministic seed if the provider supports it.",
  54. },
  55. },
  56. }
  57. ],
  58. }
  59. def main() -> None:
  60. parser = argparse.ArgumentParser(description="Workflow Registry for Qwen Image OpenClaw Skill")
  61. parser.add_argument("action", choices=["list"], help="Action to perform")
  62. parser.add_argument("--agent", action="store_true", help="Output full JSON schema for agent parsing")
  63. args = parser.parse_args()
  64. payload = build_registry_payload()
  65. if args.agent:
  66. print(json.dumps(payload, ensure_ascii=False, indent=2))
  67. return
  68. workflows = payload["workflows"]
  69. for workflow in workflows:
  70. print(f"{workflow['id']}: {workflow['description']}")
  71. if __name__ == "__main__":
  72. main()