Skip to main content

LLM-to-LLM interview framework for evaluating conversational capabilities

Project description

llm-talk

LLM-to-LLM interview framework for evaluating conversational capabilities.

Let LLMs interview each other to reveal strengths, weaknesses, and surprising behaviors that benchmarks miss.

Quick Start

from llm_talk import Interview

result = Interview("openai", "claude").run()
result.save("output.md")
print(result.evaluation)

Installation

pip install llm-talk

Set your API keys as environment variables:

export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...

Usage

Model Aliases

Use short names or full provider:model strings:

Alias Resolves to
openai openai:gpt-4o-mini
claude anthropic:claude-sonnet-4-5
gpt4 openai:gpt-4o
sonnet anthropic:claude-sonnet-4-5
opus anthropic:claude-opus-4-5
gemini google:gemini-2.0-flash
mistral mistral:mistral-large-latest
Interview("openai:gpt-4o", "anthropic:claude-opus-4-5").run()

Custom Topics

result = Interview(
    "openai", "claude",
    topics="Test their reasoning and code generation capabilities"
).run(turns=30)

Topic Templates

from llm_talk import Interview, TopicTemplate

result = Interview("openai", "claude", topics=TopicTemplate.TECHNICAL).run()

Available templates: DEFAULT, TECHNICAL, CREATIVE, CULTURAL.

Control Turn Count

result = Interview("openai", "claude").run(turns=100)

Custom Evaluator

By default, Claude evaluates the conversation. You can change the evaluator model, dimensions, or prompt:

from llm_talk import Interview, EvaluatorTemplate

# Use a different model as evaluator
result = Interview("claude", "openai", evaluator="gpt4").run()

# Focus evaluation on specific dimensions
result = Interview(
    "claude", "openai",
    evaluation_dimensions=EvaluatorTemplate.TECHNICAL_DIMENSIONS,
).run()

# Override the evaluator system prompt
result = Interview(
    "openai", "claude",
    evaluator_system_prompt="You are a terse, skeptical reviewer. One paragraph per section. No flattery.",
).run()

# Fully custom evaluator prompt
result = Interview(
    "openai", "claude",
    evaluator_user_prompt="Score the interviewee on depth, honesty, and clarity (1-10 each). Reply with a markdown table.",
).run()

Access Results

result = Interview("openai", "claude").run()

print(result.evaluation)        # Claude's evaluation
print(result.total_turns)       # Actual turns completed
print(result.loop_detected)     # Was a loop detected?
print(result.loop_reason)       # Why the loop was detected

result.save("interview.md")     # Save as markdown
data = result.to_dict()         # Export as dict (for JSON)

How It Works

  1. Two LLM agents are created — one as interviewer, one as interviewee
  2. They have a natural conversation for the specified number of turns
  3. Loop detection monitors for repetitive patterns (farewell loops, etc.)
  4. Claude evaluates the conversation quality and generates a report
  5. Results include the full conversation, evaluation, and metadata

Examples

See the examples/ directory for more usage patterns:

Development

git clone https://github.com/am1t/llm-talk.git
cd llm-talk
pip install -e ".[dev]"
pytest

To run the example scripts, also install the examples extra:

pip install -e ".[examples]"

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_talk-0.1.0.tar.gz (131.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_talk-0.1.0-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

Details for the file llm_talk-0.1.0.tar.gz.

File metadata

  • Download URL: llm_talk-0.1.0.tar.gz
  • Upload date:
  • Size: 131.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for llm_talk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 04c7e63a66b45f2d971a462fae7c2446c167cb46f346cbc73775954c6cd028fe
MD5 135b3b0831bdcd86f775b59cd7d9955f
BLAKE2b-256 0e2842ca174eb995eaa0f408f5f17f929343313292b0e077a30bb882c592892a

See more details on using hashes here.

File details

Details for the file llm_talk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: llm_talk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for llm_talk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e18febac05261d5dd6f6945cf9afbff531107d24e9d4ec9fe5cd91391f313b36
MD5 f46536fc72e570a148073348d224ddb5
BLAKE2b-256 78f09a5ed067b12ae59c5b08fa75e19326e7d550743b2cd248a3402f2c06e79f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page