|
|
|
|
|
|
| import json
|
| import argparse
|
| from spine import SpineAgent
|
|
|
|
|
| def main():
|
| parser = argparse.ArgumentParser(description="Spine Agent - Multi-tool AI orchestrator")
|
| parser.add_argument("prompt", help="Command prompt")
|
| parser.add_argument("--server", choices=["rig1", "spark", "rig1_network"], default="rig1")
|
| args = parser.parse_args()
|
|
|
| agent = SpineAgent()
|
| result = agent.run(args.prompt, args.server)
|
|
|
| if result["status"] == "success":
|
| op = result.get("operation", "")
|
|
|
| if op == "generate_image":
|
| print(f"Image generated: {result['filepath']}")
|
| print(f"Model: {result['model']}, Seed: {result['seed']}")
|
|
|
| elif op == "generate_characters":
|
| print(f"Characters generated: {result['success_count']}/{result['total_characters']}")
|
| print(f"Output: {result['characters_dir']}")
|
| for r in result['results']:
|
| if r['status'] == 'success':
|
| print(f" {r['character_id']}: {r['filepath']}")
|
|
|
| elif op == "generate_scene":
|
| print(f"Scene generated: {result['filepath']}")
|
| print(f"Story: {result['story']}, Page: {result['page_number']}")
|
| print(f"Characters: {result['characters']}, Seed: {result['seed']}")
|
|
|
| elif op == "create_story":
|
| print(f"Story created: {result['title']}")
|
| print(f"Format: {result['format']}, ID: {result['story_id']}")
|
| print(f"Characters: {result['characters']}, Pages: {result['pages']}")
|
| print(f"Saved: {result['filepath']}")
|
| print(f"Duration: {result['duration_seconds']}s")
|
|
|
| elif op == "render_comic":
|
| print(f"Comic rendered: {result['story']}")
|
| print(f"Pages: {result['pages']}")
|
| print(f"Output: {result['filepath']}")
|
|
|
| elif op == "render_coloring_book":
|
| print(f"Coloring book rendered: {result['story']}")
|
| print(f"Pages: {result['pages']}")
|
| print(f"Output: {result['filepath']}")
|
|
|
| elif op == "render_children_book":
|
| print(f"Children's book rendered: {result['story']}")
|
| print(f"Output: {result['filepath']}")
|
|
|
| elif op == "render_story":
|
| print(f"Story rendered: {result['story_id']}")
|
| print(f"Duration: {result['duration_seconds']}s")
|
|
|
| elif op == "retry_failures":
|
| print(f"Retry complete: {result['recovered']}/{result['retried']} recovered")
|
| if result['still_failed'] > 0:
|
| print(f"Still failing: {result['still_failed']}")
|
|
|
| elif op == "batch_generate":
|
| print(f"Batch generated: {result['success_count']}/{result['count']} images")
|
| print(f"Output: {result['output_dir']}")
|
| if result['seeds']:
|
| print(f"Seeds: {result['seeds']}")
|
|
|
| elif op == "memory_stats":
|
| print(f"Memory stats: {json.dumps(result['data'], indent=2)}")
|
|
|
| elif op == "recall":
|
| print(f"Recall results: {json.dumps(result['data'], indent=2)}")
|
|
|
| elif op == "rag_query":
|
| print(f"Answer: {result['answer']}")
|
|
|
| elif op == "read_json":
|
| print(f"Read: {result['filepath']}")
|
| print(json.dumps(result['data'], indent=2)[:500])
|
|
|
| else:
|
| print(json.dumps(result, indent=2))
|
|
|
| else:
|
| print(f"Error: {result.get('error', 'unknown')}")
|
|
|
|
|
| if __name__ == "__main__":
|
| main()
|
|
|