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
- Two LLM agents are created — one as interviewer, one as interviewee
- They have a natural conversation for the specified number of turns
- Loop detection monitors for repetitive patterns (farewell loops, etc.)
- Claude evaluates the conversation quality and generates a report
- Results include the full conversation, evaluation, and metadata
Examples
See the examples/ directory for more usage patterns:
- basic_interview.py — simplest usage
- custom_topics.py — focused topic areas
- custom_evaluator.py — evaluator model, dimensions, and prompts
- batch_experiments.py — run multiple interviews
- compare_models.py — compare different models
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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04c7e63a66b45f2d971a462fae7c2446c167cb46f346cbc73775954c6cd028fe
|
|
| MD5 |
135b3b0831bdcd86f775b59cd7d9955f
|
|
| BLAKE2b-256 |
0e2842ca174eb995eaa0f408f5f17f929343313292b0e077a30bb882c592892a
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e18febac05261d5dd6f6945cf9afbff531107d24e9d4ec9fe5cd91391f313b36
|
|
| MD5 |
f46536fc72e570a148073348d224ddb5
|
|
| BLAKE2b-256 |
78f09a5ed067b12ae59c5b08fa75e19326e7d550743b2cd248a3402f2c06e79f
|