# TranscriptionModel Interface

Interface that all speech-to-text transcription model implementations must satisfy.

## Interface Definition

```go
type TranscriptionModel interface {
    // Metadata
    SpecificationVersion() string
    Provider() string
    ModelID() string

    // Transcription
    DoTranscribe(ctx context.Context, opts *TranscriptionOptions) (*types.TranscriptionResult, error)
}
```

## Methods

| Method | Parameters | Returns | Description |
|--------|------------|---------|-------------|
| SpecificationVersion() | - | string | Specification version |
| Provider() | - | string | Provider name |
| ModelID() | - | string | Model identifier |
| DoTranscribe() | ctx, *TranscriptionOptions | *types.TranscriptionResult, error | Transcribe audio to text |

## TranscriptionOptions

```go
type TranscriptionOptions struct {
    Audio      []byte
    MimeType   string
    Language   string
    Timestamps bool
}
```

## Examples

### Using a Transcription Model

```go
package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/digitallysavvy/go-ai/pkg/provider"
    "github.com/digitallysavvy/go-ai/pkg/providers/openai"
)

func main() {
    p := openai.New(openai.Config{
        APIKey: "your-api-key",
    })
    model, err := p.TranscriptionModel("whisper-1")
    if err != nil {
        log.Fatal(err)
    }

    audioData, err := os.ReadFile("audio.mp3")
    if err != nil {
        log.Fatal(err)
    }

    result, err := model.DoTranscribe(context.Background(), &provider.TranscriptionOptions{
        Audio:    audioData,
        MimeType: "audio/mpeg",
        Language: "en",
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Transcription:", result.Text)
}
```

## See Also

- [Transcribe](https://goaisdk.com/docs/reference/ai/transcribe.md) - High-level transcription function
- [SpeechModel](https://goaisdk.com/docs/reference/providers/speech-model.md) - Text-to-speech interface
- [Custom Provider](https://goaisdk.com/docs/reference/providers/custom-provider.md) - Implementing custom providers
