Last updated
Last updated
import arweave
import llama_index
from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader
from eliza_framework import ElizaAgent
from flask import Flask, request, jsonify
import os
# --- Configuration Variables ---
ARWEAVE_GATEWAY = os.getenv('ARWEAVE_GATEWAY', 'https://arweave.net')
DATABASE_TRANSACTION_ID = os.getenv('DATABASE_TRANSACTION_ID', '<your-arweave-database-transaction-id>')
LLAMA_MODEL = os.getenv('LLAMA_MODEL', 'llama-3.2')
# --- Initialize Arweave Connection ---
def fetch_arweave_data(transaction_id):
try:
client = arweave.Client(gateway=ARWEAVE_GATEWAY)
transaction_data = client.transactions.get_data(transaction_id)
return transaction_data.decode('utf-8')
except Exception as e:
print(f"Error fetching data from ArWeave: {e}")
return None
# --- Load Data into LlamaIndex ---
def load_data_to_index(data):
with open('arweave_data.txt', 'w') as file:
file.write(data)
documents = SimpleDirectoryReader(input_dir='.', required_exts=['.txt']).load_data()
index = GPTVectorStoreIndex.from_documents(documents, service_context=llama_index.ServiceContext.from_defaults(model=LLAMA_MODEL))
return index
# --- Define AI Agent with Eliza Framework ---
class ArweaveAgent(ElizaAgent):
def __init__(self, index):
super().__init__(name='ArWeave Query Agent')
self.index = index
def respond(self, query):
retriever = self.index.as_retriever()
response = retriever.retrieve(query)
return response[0].node.get_text() if response else "No relevant data found."
# --- API Setup ---
app = Flask(__name__)
agent = None
@app.route('/query', methods=['POST'])
def query_agent():
if not agent:
return jsonify({"error": "Agent not initialized"}), 500
data = request.json
query = data.get('query')
if not query:
return jsonify({"error": "No query provided"}), 400
response = agent.respond(query)
return jsonify({"response": response})
@app.route('/health', methods=['GET'])
def health_check():
return jsonify({"status": "running"})
# --- Main Function ---
def main():
global agent
arweave_data = fetch_arweave_data(DATABASE_TRANSACTION_ID)
if arweave_data:
index = load_data_to_index(arweave_data)
agent = ArweaveAgent(index)
print("ArWeave AI Agent API is running on Gaia AI.")
app.run(host='0.0.0.0', port=5000)
else:
print("Failed to retrieve ArWeave data.")
if __name__ == '__main__':
main()