runnable-hub/python/example/agent/cli-prerun-agent.py (48 lines of code) (raw):

#!/usr/bin/env python3 import asyncio from json import tool import os import sys from urllib import request import yaml import json current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, os.path.dirname(os.path.dirname(current_dir))) from runnable_workers.agentWorker.worker import Worker as AgentWorker from runnable_workers.processWorker.worker import Worker as ProcessWorker from runnable_workers.toolWorker.worker import Worker as ToolWorker from runnable_workers.pythonWorker.worker import Worker as PythonWorker from runnable_workers.llmWorker.worker import Worker as LlmWorker from runnable_workers.processWorker.worker import Worker as ProcessWorker from runnable_workers.jinjaWorker.worker import Worker as JinjaWorker from runnable_workers.apiWorker.worker import Worker as ApiWorker from runnable_workers.chainWorker.worker import Worker as ChainWorker from runnable_workers.agentWorker.request.agentRequest import AgentRequest from runnable_workers.agentWorker.request.agentChainTemplate import AgentChainTemplate from runnable_workers.llmWorker.request.llmSetting import LlmSetting from runnable_workers.agentWorker.request.agentDefine import AgentDefine from runnable_workers.toolWorker.request.toolDefine import ToolDefine from runnable_hub import RunnableHub from runnable_hub.store import RunnableLocalFileStore QWEN_SK = os.getenv("QWEN_SK") defineToolYaml = """ toolCode: get_domain_ip toolVersion: v1 toolType: API description: | This tool is used to get the IP address of a domain. setting: outputLoads: JSON headers: Accept: application/dns-json params: name: "{{ inputs.domain }}" type: A url: https://cloudflare-dns.com/dns-query method: GET inputSpec: - name: domain type: STRING required: true outputSpec: - name: ip type: STRING outputsLoads: JSON outputTemplate: | {"ip": "{{result.Answer[0].data}}"} """ defineAgentYaml = """ agentCode: domain_simple_checker agentVersion: v1 prerun: outputs: ${{ jobs.call.outputs }} jobs: call: outputs: ${{ steps.toolCall.outputs.ip }} steps: - id: toolCall tool: toolCode: get_domain_ip toolVersion: v1 inputs: domain: "${{ inputs.prompt }}" inputDefine: - name: prompt type: STRING required: true functions: - type: TOOL name: get_domain_ip version: v1 instruction: | 你是一个检查域名的工具,输入一个域名,返回一个ip """ requestYaml = """ agentCode: domain_simple_checker agentVersion: v1 inputs: prompt: "www.baidu.com" """ async def main(): runnableHub = RunnableHub(store=RunnableLocalFileStore("/tmp/runnableHub/context")) toolWorker = ToolWorker(store=RunnableLocalFileStore("/tmp/runnableHub/tool")) agentWorker = AgentWorker(store=RunnableLocalFileStore("/tmp/runnableHub/agent"), toolWorker=toolWorker) toolWorker.addTool(ToolDefine.model_validate_json(json.dumps(yaml.safe_load(defineToolYaml)))) agentWorker.addAgent(AgentDefine.model_validate_json(json.dumps(yaml.safe_load(defineAgentYaml)))) runnableHub.registerWorker(agentWorker) runnableHub.registerWorker(toolWorker) runnableHub.registerWorker(ProcessWorker()) runnableHub.registerWorker(PythonWorker()) runnableHub.registerWorker(ProcessWorker()) runnableHub.registerWorker(JinjaWorker()) runnableHub.registerWorker(ApiWorker()) print(runnableHub.workers) runnableContext = await runnableHub.executeStart(AgentRequest.model_validate_json(json.dumps(yaml.safe_load(requestYaml)))) runnableContext = await runnableHub.executeWait(runnableContext) print(json.dumps(json.loads(runnableContext.model_dump_json()), indent=4)) if __name__ == "__main__": asyncio.run(main())