A powerful CLI tool and Python SDK for seamlessly translating code between machine learning frameworks (PyTorch, TensorFlow, JAX, Scikit-learn) using advanced AI models. Features authentication, translation history, and both command-line and programmatic interfaces for developers working across different ML ecosystems.
Project description
Framework Translator
A powerful CLI tool and Python SDK for seamlessly translating code between machine learning frameworks using advanced AI models. Convert your code between PyTorch, TensorFlow, JAX, and Scikit-learn with ease.
🚀 Features
- Multi-Framework Support: Translate between PyTorch, TensorFlow, JAX, and Scikit-learn
- CLI Interface: Easy-to-use command-line tool with interactive prompts
- Python SDK: Programmatic access for integration into your workflows
- Authentication: Secure user authentication with credential management
- Translation History: Track and download your translation history
- Smart Inference: Automatic source framework detection when not specified
- File & Interactive Input: Support for both file-based and interactive code input
📦 Installation
From PyPI (Recommended)
pip install framework-translator
From Source
git clone <repository-url>
cd pypi-tool
pip install .
🔧 Quick Start
1. Register an Account
Before using the tool, you need to register at: https://code-translation-frontend-283805296028.us-central1.run.app/register
2. Login
ft login
3. Translate Code
ft translate
Follow the interactive prompts to translate your code!
🖥️ CLI Usage
Commands Overview
ft --help # Show all available commands
ft login # Login to the service
ft logout # Logout from the service
ft translate # Interactive code translation
ft history # View translation history
ft history -d # Download history as JSON
ft version # Show version information
Interactive Translation Workflow
When you run ft translate, you'll be guided through:
- Language Selection: Choose your programming language (currently supports Python)
- Source Framework: Specify source framework or let the AI infer it
- Framework Group: Select framework category (e.g., "ml" for machine learning)
- Target Framework: Choose your target framework
- Code Input: Provide code via interactive input or file path
Example Translation Session
$ ft translate
Translate: Framework Translator
Choose a language -> Languages supported [python]: python
Give us your framework: (Enter to let the model infer): pytorch
Choose a framework group -> Framework groups supported for language python [ml]: ml
Choose a target framework -> Target frameworks supported for group ml [jax, pytorch, scikit-learn, tensorflow]: tensorflow
Provide source code via one of the options:
1) Paste (end with 'END' on its own line)
2) File path
Select [1/2]: 1
Enter source code (end with a single line containing only 'END'):
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(10, 1)
def forward(self, x):
return self.fc(x)
END
Translating code to tensorflow...
--------------------------------------
----------Translation Result----------
--------------------------------------
import tensorflow as tf
class SimpleNet(tf.keras.Model):
def __init__(self):
super().__init__()
self.fc = tf.keras.layers.Dense(1)
def call(self, x):
return self.fc(x)
--------------------------------------
Translation completed successfully.
File-Based Translation
You can also translate code from files:
ft translate
# ... follow prompts ...
Select [1/2]: 2
Enter file path: /path/to/your/code.py
View Translation History
# View history in terminal
ft history
# Download history as JSON file
ft history -d
🐍 Python SDK Usage
The Framework Translator also provides a Python SDK for programmatic access:
Basic SDK Usage
import framework_translator.sdk as ft
# Check login status
if not ft.is_logged_in():
# Login (you can also use environment variables)
success = ft.login("your_username", "your_password")
if not success:
print("Login failed!")
exit(1)
# Translate code
pytorch_code = """
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(784, 10)
def forward(self, x):
return self.fc(x)
"""
# Translate to TensorFlow
tensorflow_code = ft.translate(
code=pytorch_code,
target_framework="tensorflow",
source_framework="pytorch" # Optional - can be inferred
)
print("Translated code:")
print(tensorflow_code)
SDK Reference
Authentication
# Check if logged in
ft.is_logged_in() -> bool
# Login
ft.login(username: str, password: str) -> bool
# Logout
ft.logout() -> None
Translation
# Translate code
ft.translate(
code: str,
target_framework: str,
source_framework: Optional[str] = None
) -> str
Framework Information
# Get supported frameworks
ft.get_supported_frameworks(group: Optional[str] = None) -> list[str]
ft.get_supported_groups() -> list[str]
ft.get_supported_languages() -> list[str]
# Get framework details
ft.get_framework_info(framework_name: str) -> dict
History
# Get translation history
ft.get_history(page: int = 1, per_page: int = 50) -> list[dict]
Advanced SDK Example
import framework_translator.sdk as ft
def translate_project_files():
"""Example: Translate multiple files in a project"""
if not ft.is_logged_in():
print("Please login first")
return
# Get list of supported frameworks
frameworks = ft.get_supported_frameworks("ml")
print(f"Supported ML frameworks: {frameworks}")
# Read source file
with open("model.py", "r") as f:
source_code = f.read()
# Translate to multiple frameworks
for target in ["tensorflow", "jax"]:
try:
translated = ft.translate(
code=source_code,
target_framework=target,
source_framework="pytorch"
)
# Save translated code
with open(f"model_{target}.py", "w") as f:
f.write(translated)
print(f"✅ Translated to {target}")
except Exception as e:
print(f"❌ Failed to translate to {target}: {e}")
# Get translation history
history = ft.get_history()
print(f"You have {len(history)} translations in history")
🛠️ Supported Frameworks
Currently supported machine learning frameworks:
| Framework | Status | Description |
|---|---|---|
| PyTorch | ✅ | Popular deep learning framework |
| TensorFlow | ✅ | Google's machine learning platform |
| JAX | ✅ | NumPy-compatible library for ML research |
| Scikit-learn | ✅ | Machine learning library for Python |
🔐 Authentication & Security
- Secure Authentication: User credentials are encrypted and stored locally
- Token-Based: Uses JWT tokens for API communication
- Session Management: Automatic token refresh and session handling
- Privacy: Your code and translations are associated with your account
📊 Translation History
The tool automatically tracks all your translations:
- Persistent Storage: All translations are saved to your account
- Metadata Tracking: Includes timestamps, models used, and performance metrics
- Download Options: Export your history as JSON for analysis
- Search & Filter: View recent translations in the CLI
⚙️ Configuration
The tool stores configuration in platform-appropriate directories:
- Linux/macOS:
~/.config/framework_translator/ - Windows:
%APPDATA%\strasta\framework_translator\
Configuration includes:
- Encrypted user credentials
- User preferences
- Cache data
🚨 Error Handling
Common issues and solutions:
Authentication Errors
# If you get authentication errors:
ft logout
ft login
Network Issues
- Check your internet connection
- Verify the backend service is accessible
- Try again after a few moments
Invalid Framework
- Use
ft translateto see supported frameworks interactively - Check spelling of framework names
📝 Examples
Example 1: PyTorch to TensorFlow CNN
Input (PyTorch):
import torch
import torch.nn as nn
import torch.nn.functional as F
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, 3, 1)
self.conv2 = nn.Conv2d(32, 64, 3, 1)
self.fc1 = nn.Linear(9216, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = F.max_pool2d(x, 2)
x = torch.flatten(x, 1)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return F.log_softmax(x, dim=1)
Output (TensorFlow):
import tensorflow as tf
class CNN(tf.keras.Model):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = tf.keras.layers.Conv2D(32, 3, activation='relu')
self.conv2 = tf.keras.layers.Conv2D(64, 3, activation='relu')
self.pool = tf.keras.layers.MaxPooling2D(2)
self.flatten = tf.keras.layers.Flatten()
self.fc1 = tf.keras.layers.Dense(128, activation='relu')
self.fc2 = tf.keras.layers.Dense(10)
def call(self, x):
x = self.conv1(x)
x = self.conv2(x)
x = self.pool(x)
x = self.flatten(x)
x = self.fc1(x)
x = self.fc2(x)
return tf.nn.log_softmax(x, axis=1)
Example 2: Scikit-learn to PyTorch
Input (Scikit-learn):
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import numpy as np
# Create and train model
scaler = StandardScaler()
model = LogisticRegression()
X_scaled = scaler.fit_transform(X_train)
model.fit(X_scaled, y_train)
# Make predictions
X_test_scaled = scaler.transform(X_test)
predictions = model.predict(X_test_scaled)
Output (PyTorch):
import torch
import torch.nn as nn
from sklearn.preprocessing import StandardScaler
class LogisticRegression(nn.Module):
def __init__(self, input_dim):
super(LogisticRegression, self).__init__()
self.linear = nn.Linear(input_dim, 1)
def forward(self, x):
return torch.sigmoid(self.linear(x))
# Create and train model
scaler = StandardScaler()
model = LogisticRegression(X_train.shape[1])
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
X_scaled = scaler.fit_transform(X_train)
X_tensor = torch.FloatTensor(X_scaled)
y_tensor = torch.FloatTensor(y_train).reshape(-1, 1)
# Training loop
for epoch in range(100):
optimizer.zero_grad()
outputs = model(X_tensor)
loss = criterion(outputs, y_tensor)
loss.backward()
optimizer.step()
# Make predictions
X_test_scaled = scaler.transform(X_test)
X_test_tensor = torch.FloatTensor(X_test_scaled)
with torch.no_grad():
predictions = model(X_test_tensor).numpy()
🤝 Contributing
We welcome contributions! Please see our contributing guidelines for more information.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🆘 Support
- Issues: Report bugs or request features on our GitHub issues page
- Documentation: This README and built-in help (
ft help) - Community: Join our community discussions
🔄 Changelog
Version 1.1.0
- Added comprehensive SDK support
- Improved authentication and session management
- Enhanced error handling and user feedback
- Added translation history tracking
- Support for file-based input
Version 1.0.0
- Initial release
- Basic CLI functionality
- Support for PyTorch, TensorFlow, JAX, and Scikit-learn
- User authentication and backend integration
Happy Translating! 🚀
Transform your machine learning code across frameworks with the power of AI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file framework_translator-1.1.1.tar.gz.
File metadata
- Download URL: framework_translator-1.1.1.tar.gz
- Upload date:
- Size: 14.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e84268608a824116b6c803a21a5840522745e9c5d7c0e425f098335110b6499
|
|
| MD5 |
99cabc8edf2a5f59cee1c43bfbdaaec9
|
|
| BLAKE2b-256 |
2a3e730e6e70237876db16ef0482171ae1294752fb29d28002912f1bcd7ded1c
|
Provenance
The following attestation bundles were made for framework_translator-1.1.1.tar.gz:
Publisher:
python-publish.yml on eitantuchin/Senior-Project
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
framework_translator-1.1.1.tar.gz -
Subject digest:
4e84268608a824116b6c803a21a5840522745e9c5d7c0e425f098335110b6499 - Sigstore transparency entry: 634638039
- Sigstore integration time:
-
Permalink:
eitantuchin/Senior-Project@c35194792aa810c528936ae7610a3b82f0f51644 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/eitantuchin
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c35194792aa810c528936ae7610a3b82f0f51644 -
Trigger Event:
release
-
Statement type:
File details
Details for the file framework_translator-1.1.1-py2.py3-none-any.whl.
File metadata
- Download URL: framework_translator-1.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 17.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6dcefab016a6f470f0ea151188ece4d6704ae688a44529a0c4e5ed3fdb6472e
|
|
| MD5 |
66c79ec8baea09fff8ee199319c2531f
|
|
| BLAKE2b-256 |
1d8bfc4685f899613bd10600e9a58bd9f266ac975c3afdb2271df02e69d55156
|
Provenance
The following attestation bundles were made for framework_translator-1.1.1-py2.py3-none-any.whl:
Publisher:
python-publish.yml on eitantuchin/Senior-Project
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
framework_translator-1.1.1-py2.py3-none-any.whl -
Subject digest:
e6dcefab016a6f470f0ea151188ece4d6704ae688a44529a0c4e5ed3fdb6472e - Sigstore transparency entry: 634638042
- Sigstore integration time:
-
Permalink:
eitantuchin/Senior-Project@c35194792aa810c528936ae7610a3b82f0f51644 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/eitantuchin
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c35194792aa810c528936ae7610a3b82f0f51644 -
Trigger Event:
release
-
Statement type: