pyvoynich / example_usage.py
wjbmattingly's picture
Upload 5 files
e6c6cdf verified
#!/usr/bin/env python3
import requests
import json
import argparse
import sys
# API base URL - adjust as needed
API_BASE_URL = "https://wjbmattingly-pyvoynich.hf.space"
def print_section(title):
"""Print a section header."""
print("\n" + "=" * 50)
print(f" {title}")
print("=" * 50)
def direct_api_examples():
"""Example usage with direct API calls."""
print_section("DIRECT API EXAMPLES")
# Example 1: List available rulesets
print("\n1. List available rulesets:")
response = requests.get(f"{API_BASE_URL}/rulesets")
if response.status_code == 200:
data = response.json()
print(f"Available rulesets: {', '.join(data['rulesets'])}")
else:
print(f"Error: {response.status_code} - {response.text}")
# Example 2: Get ruleset info
print("\n2. Get information about a specific ruleset:")
response = requests.get(f"{API_BASE_URL}/ruleset/STA_Eva_def")
if response.status_code == 200:
data = response.json()
print(f"Ruleset: {data['name']}")
print(f"Description: {data['description']}")
print(f"Entry count: {data['entry_count']}")
print("Sample entries:")
for key, value in data['sample_entries'].items():
print(f" {key}: {value}")
else:
print(f"Error: {response.status_code} - {response.text}")
# Example 3: Translate with STA_Eva_def (reverse direction)
print("\n3. Translate using STA_Eva_def (reverse direction):")
input_text = "tchor. ckhoiin. daiin. cphchar-"
payload = {
"text": input_text,
"direction": 2 # reverse direction
}
response = requests.post(
f"{API_BASE_URL}/translate/STA_Eva_def",
json=payload
)
if response.status_code == 200:
data = response.json()
print(f"Input: {data['original_text']}")
print(f"Output: {data['translated_text']}")
print(f"Direction: {data['direction']}")
print(f"Ruleset: {data['ruleset']}")
else:
print(f"Error: {response.status_code} - {response.text}")
# Example 4: Translate with STA_Eva_def (forward direction)
print("\n4. Translate using STA_Eva_def (forward direction):")
input_text = "Q2K1A1C1.U1A3G1.B1A3G1.T1K1A3C1"
payload = {
"text": input_text,
"direction": 1 # forward direction
}
response = requests.post(
f"{API_BASE_URL}/translate/STA_Eva_def",
json=payload
)
if response.status_code == 200:
data = response.json()
print(f"Input: {data['original_text']}")
print(f"Output: {data['translated_text']}")
print(f"Direction: {data['direction']}")
print(f"Ruleset: {data['ruleset']}")
else:
print(f"Error: {response.status_code} - {response.text}")
# Example 5: Transform text from one ruleset to another
print("\n5. Transform from Curr_Eva_def to Eva_Cuva:")
input_text = "FCRO8D" # Currier format
payload = {
"text": input_text,
"direction": 1
}
response = requests.post(
f"{API_BASE_URL}/transform/Curr_Eva_def/Eva_Cuva",
json=payload
)
if response.status_code == 200:
data = response.json()
print(f"Input: {data['original_text']}")
print(f"Output: {data['translated_text']}")
print(f"Direction: {data['direction']}")
print(f"Transformation: {data['ruleset']}")
else:
print(f"Error: {response.status_code} - {response.text}")
# Example 6: Custom ruleset translation
print("\n6. Translate using custom ruleset:")
custom_rules = {
"hello": "world",
"test": "success",
"ai": "assistant"
}
payload = {
"rules": custom_rules,
"direction": 1,
"text": "hello test ai"
}
response = requests.post(
f"{API_BASE_URL}/translate/custom",
json=payload
)
if response.status_code == 200:
data = response.json()
print(f"Input: {data['original_text']}")
print(f"Output: {data['translated_text']}")
print(f"Direction: {data['direction']}")
print(f"Ruleset: {data['ruleset']}")
else:
print(f"Error: {response.status_code} - {response.text}")
def parse_args():
"""Parse command line arguments."""
parser = argparse.ArgumentParser(description="Pyvoynich API Example Usage")
subparsers = parser.add_subparsers(dest="command", help="Command to execute")
# List rulesets command
subparsers.add_parser("list", help="List available rulesets")
# Get ruleset info command
info_parser = subparsers.add_parser("info", help="Get information about a ruleset")
info_parser.add_argument("ruleset", help="Name of the ruleset")
# Translate command
translate_parser = subparsers.add_parser("translate", help="Translate text using a ruleset")
translate_parser.add_argument("ruleset", help="Name of the ruleset to use")
translate_parser.add_argument("text", help="Text to translate")
translate_parser.add_argument("--direction", "-d", type=int, choices=[1, 2],
default=1, help="Translation direction (1=forward, 2=reverse)")
# Transform command
transform_parser = subparsers.add_parser("transform", help="Transform text from one ruleset to another")
transform_parser.add_argument("source", help="Source ruleset name")
transform_parser.add_argument("target", help="Target ruleset name")
transform_parser.add_argument("text", help="Text to transform")
transform_parser.add_argument("--direction", "-d", type=int, choices=[1, 2],
default=1, help="Translation direction (1=forward, 2=reverse)")
# Examples command
subparsers.add_parser("examples", help="Run example API usage")
return parser.parse_args()
def main():
args = parse_args()
if args.command == "list":
response = requests.get(f"{API_BASE_URL}/rulesets")
if response.status_code == 200:
data = response.json()
print("Available rulesets:")
for ruleset in data["rulesets"]:
print(f" - {ruleset}")
else:
print(f"Error: {response.status_code} - {response.text}")
elif args.command == "info":
response = requests.get(f"{API_BASE_URL}/ruleset/{args.ruleset}")
if response.status_code == 200:
data = response.json()
print(f"Ruleset: {data['name']}")
print(f"Description: {data['description']}")
print(f"Entry count: {data['entry_count']}")
print("Sample entries:")
for key, value in data['sample_entries'].items():
print(f" {key}: {value}")
else:
print(f"Error: {response.status_code} - {response.text}")
elif args.command == "translate":
payload = {
"text": args.text,
"direction": args.direction
}
response = requests.post(f"{API_BASE_URL}/translate/{args.ruleset}", json=payload)
if response.status_code == 200:
data = response.json()
print(f"Input: {data['original_text']}")
print(f"Output: {data['translated_text']}")
print(f"Direction: {data['direction']}")
print(f"Ruleset: {data['ruleset']}")
else:
print(f"Error: {response.status_code} - {response.text}")
elif args.command == "transform":
payload = {
"text": args.text,
"direction": args.direction
}
response = requests.post(
f"{API_BASE_URL}/transform/{args.source}/{args.target}",
json=payload
)
if response.status_code == 200:
data = response.json()
print(f"Input: {data['original_text']}")
print(f"Output: {data['translated_text']}")
print(f"Direction: {data['direction']}")
print(f"Transformation: {data['ruleset']}")
else:
print(f"Error: {response.status_code} - {response.text}")
elif args.command == "examples":
direct_api_examples()
else:
print("Please provide a command. Run 'python example_usage.py -h' for help.")
if __name__ == "__main__":
# Check if there are command line arguments
if len(sys.argv) > 1:
main()
else:
# If no arguments, run the direct examples
print("\nRunning API examples. Make sure the API server is running.")
print("To start the server, run: uvicorn api:app --reload")
print("\nFor command-line usage, try: python example_usage.py -h")
direct_api_examples()