> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portkey.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Fine-tune

> Fine-tune your models with OpenAI

### Upload a file

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY", # Replace with your Portkey API key
        provider="@PROVIDER" 
    )

    # Upload a file for fine-tuning
    file = portkey.files.create(
        file=open("dataset.jsonl", "rb"),
        purpose="fine-tune"
    )

    print(file)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```typescript theme={"system"}
    import { Portkey } from "portkey-ai";
    import * as fs from 'fs';

    // Initialize the Portkey client
    const portkey = Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        provider:"@PROVIDER"   
    });

    (async () => {
        // Upload a file for fine-tuning
        const file = await portkey.files.create({
            file: fs.createReadStream("dataset.jsonl"),
            purpose: "fine-tune"
        });

        console.log(file);
    })();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI
    from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="@PROVIDER",
            api_key="PORTKEY_API_KEY"
        )
    )

    # Upload a file for fine-tuning
    file = openai.files.create(
        file=open("dataset.jsonl", "rb"),
        purpose="fine-tune"
    )

    print(file)
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```typescript theme={"system"}
    import OpenAI from 'openai';
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai';
    import * as fs from 'fs';

    const openai = new OpenAI({
        apiKey: 'OPENAI_API_KEY',
        baseURL: PORTKEY_GATEWAY_URL,
        defaultHeaders: createHeaders({
            provider:"@PROVIDER",
            apiKey: "PORTKEY_API_KEY"
        })
    });

    (async () => {
        // Upload a file for fine-tuning
        const file = await openai.files.create({
            file: fs.createReadStream("dataset.jsonl"),
            purpose: "fine-tune"
        });

        console.log(file);
    })();
    ```
  </Tab>

  <Tab title="REST API">
    ```sh theme={"system"}
    curl -X POST --header 'x-portkey-api-key: <portkey_api_key>' \
     --header 'x-portkey-provider: @provider' \
     --form 'file=@dataset.jsonl' \
     --form 'purpose=fine-tune' \
     'https://api.portkey.ai/v1/files'
    ```
  </Tab>
</Tabs>

### Create a fine-tuning job

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY", # Replace with your Portkey API key
        provider="@PROVIDER" 
    )

    # Create a fine-tuning job
    fine_tune_job = portkey.fine_tuning.jobs.create(
        model="gpt-3.5-turbo", # Base model to fine-tune
        training_file="file_id", # ID of the uploaded training file
        validation_file="file_id", # Optional: ID of the uploaded validation file
        suffix="finetune_name", # Custom suffix for the fine-tuned model name
        hyperparameters={
            "n_epochs": 1
        }
    )

    print(fine_tune_job)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```typescript theme={"system"}
    import { Portkey } from "portkey-ai";

    // Initialize the Portkey client
    const portkey = Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        provider:"@PROVIDER"   
    });

    (async () => {
        // Create a fine-tuning job
        const fineTuneJob = await portkey.fineTuning.jobs.create({
            model: "gpt-3.5-turbo", // Base model to fine-tune
            training_file: "file_id", // ID of the uploaded training file
            validation_file: "file_id", // Optional: ID of the uploaded validation file
            suffix: "finetune_name", // Custom suffix for the fine-tuned model name
            hyperparameters: {
                n_epochs: 1
            }
        });

        console.log(fineTuneJob);
    })();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI
    from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="@PROVIDER",
            api_key="PORTKEY_API_KEY"
        )
    )

    # Create a fine-tuning job
    fine_tune_job = openai.fine_tuning.jobs.create(
        model="gpt-3.5-turbo", # Base model to fine-tune
        training_file="file_id", # ID of the uploaded training file
        validation_file="file_id", # Optional: ID of the uploaded validation file
        suffix="finetune_name", # Custom suffix for the fine-tuned model name
        hyperparameters={
            "n_epochs": 1
        }
    )

    print(fine_tune_job)
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```typescript theme={"system"}
    import OpenAI from 'openai';
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai';

    const openai = new OpenAI({
        apiKey: 'OPENAI_API_KEY',
        baseURL: PORTKEY_GATEWAY_URL,
        defaultHeaders: createHeaders({
            provider:"@PROVIDER",
            apiKey: "PORTKEY_API_KEY"
        })
    });

    (async () => {
        // Create a fine-tuning job
        const fineTuneJob = await openai.fineTuning.jobs.create({
            model: "gpt-3.5-turbo", // Base model to fine-tune
            training_file: "file_id", // ID of the uploaded training file
            validation_file: "file_id", // Optional: ID of the uploaded validation file
            suffix: "finetune_name", // Custom suffix for the fine-tuned model name
            hyperparameters: {
                n_epochs: 1
            }
        });

        console.log(fineTuneJob);
    })();
    ```
  </Tab>

  <Tab title="REST API">
    ```sh theme={"system"}
    curl -X POST --header 'Content-Type: application/json' \
     --header 'x-portkey-api-key: <portkey_api_key>' \
     --header 'x-portkey-provider: @provider' \
     --data \
     $'{"model": "<base_model>", "suffix": "<finetune_name>", "training_file": "<file_id>", "validation_file": "<file_id>", "method": {"type": "supervised", "supervised": {"hyperparameters": {"n_epochs": 1}}}}\n' \
    'https://api.portkey.ai/v1/fine_tuning/jobs'
    ```
  </Tab>
</Tabs>

### List fine-tuning jobs

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY", # Replace with your Portkey API key
        provider="@PROVIDER" 
    )

    # List all fine-tuning jobs
    jobs = portkey.fine_tuning.jobs.list(
        limit=10  # Optional: Number of jobs to retrieve (default: 20)
    )

    print(jobs)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```typescript theme={"system"}
    import { Portkey } from "portkey-ai";

    // Initialize the Portkey client
    const portkey = Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        provider:"@PROVIDER"   
    });

    (async () => {
        // List all fine-tuning jobs
        const jobs = await portkey.fineTuning.jobs.list({
            limit: 10  // Optional: Number of jobs to retrieve (default: 20)
        });

        console.log(jobs);
    })();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI
    from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="@PROVIDER",
            api_key="PORTKEY_API_KEY"
        )
    )

    # List all fine-tuning jobs
    jobs = openai.fine_tuning.jobs.list(
        limit=10  # Optional: Number of jobs to retrieve (default: 20)
    )

    print(jobs)
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```typescript theme={"system"}
    import OpenAI from 'openai';
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai';

    const openai = new OpenAI({
        apiKey: 'OPENAI_API_KEY',
        baseURL: PORTKEY_GATEWAY_URL,
        defaultHeaders: createHeaders({
            provider:"@PROVIDER",
            apiKey: "PORTKEY_API_KEY"
        })
    });

    (async () => {
        // List all fine-tuning jobs
        const jobs = await openai.fineTuning.jobs.list({
            limit: 10  // Optional: Number of jobs to retrieve (default: 20)
        });

        console.log(jobs);
    })();
    ```
  </Tab>

  <Tab title="REST API">
    ```sh theme={"system"}
    curl -X GET --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-provider: @provider' \
    'https://api.portkey.ai/v1/fine_tuning/jobs'
    ```
  </Tab>
</Tabs>

### Get a fine-tuning job

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY", # Replace with your Portkey API key
        provider="@PROVIDER" 
    )

    # Retrieve a specific fine-tuning job
    job = portkey.fine_tuning.jobs.retrieve(
        "job_id"  # The ID of the fine-tuning job to retrieve
    )

    print(job)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```typescript theme={"system"}
    import { Portkey } from "portkey-ai";

    // Initialize the Portkey client
    const portkey = Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        provider:"@PROVIDER"   
    });

    (async () => {
        // Retrieve a specific fine-tuning job
        const job = await portkey.fineTuning.jobs.retrieve(
            "job_id"  // The ID of the fine-tuning job to retrieve
        );

        console.log(job);
    })();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI
    from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="@PROVIDER",
            api_key="PORTKEY_API_KEY"
        )
    )

    # Retrieve a specific fine-tuning job
    job = openai.fine_tuning.jobs.retrieve(
        fine_tuning_job_id="job_id"  # The ID of the fine-tuning job to retrieve
    )

    print(job)
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```typescript theme={"system"}
    import OpenAI from 'openai';
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai';

    const openai = new OpenAI({
        apiKey: 'OPENAI_API_KEY',
        baseURL: PORTKEY_GATEWAY_URL,
        defaultHeaders: createHeaders({
            provider:"@PROVIDER",
            apiKey: "PORTKEY_API_KEY"
        })
    });

    (async () => {
        // Retrieve a specific fine-tuning job
        const job = await openai.fineTuning.jobs.retrieve(
            "job_id"  // The ID of the fine-tuning job to retrieve
        );

        console.log(job);
    })();
    ```
  </Tab>

  <Tab title="REST API">
    ```sh theme={"system"}
    curl -X GET --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-provider: @provider' \
    'https://api.portkey.ai/v1/fine_tuning/jobs/<job_id>'
    ```
  </Tab>
</Tabs>

### Cancel a fine-tuning job

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY", # Replace with your Portkey API key
        provider="@PROVIDER" 
    )

    # Cancel a fine-tuning job
    cancelled_job = portkey.fine_tuning.jobs.cancel(
        "job_id"  # The ID of the fine-tuning job to cancel
    )

    print(cancelled_job)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```typescript theme={"system"}
    import { Portkey } from "portkey-ai";

    // Initialize the Portkey client
    const portkey = Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        provider:"@PROVIDER"   
    });

    (async () => {
        // Cancel a fine-tuning job
        const cancelledJob = await portkey.fineTuning.jobs.cancel(
            "job_id"  // The ID of the fine-tuning job to cancel
        );

        console.log(cancelledJob);
    })();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI
    from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="@PROVIDER",
            api_key="PORTKEY_API_KEY"
        )
    )

    # Cancel a fine-tuning job
    cancelled_job = openai.fine_tuning.jobs.cancel(
        "job_id"  # The ID of the fine-tuning job to cancel
    )

    print(cancelled_job)
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```typescript theme={"system"}
    import OpenAI from 'openai';
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai';

    const openai = new OpenAI({
        apiKey: 'OPENAI_API_KEY',
        baseURL: PORTKEY_GATEWAY_URL,
        defaultHeaders: createHeaders({
            provider:"@PROVIDER",
            apiKey: "PORTKEY_API_KEY"
        })
    });

    (async () => {
        // Cancel a fine-tuning job
        const cancelledJob = await openai.fineTuning.jobs.cancel(
            "job_id"  // The ID of the fine-tuning job to cancel
        );

        console.log(cancelledJob);
    })();
    ```
  </Tab>

  <Tab title="REST API">
    ```sh theme={"system"}
    curl -X POST --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-provider: @provider' \
    'https://api.portkey.ai/v1/fine_tuning/jobs/<job_id>/cancel'
    ```
  </Tab>
</Tabs>

Refer to [OpenAI's fine-tuning documentation](https://platform.openai.com/docs/api-reference/fine-tuning) for more information on the parameters and options available.
